[英]What is the exact difference between 'Adapter' and 'Mediator" patterns?
他们没有太多共同点,IMO。
介体用于避免将多个组件耦合在一起。 而不是每个组件直接相互“交谈”(因此必须彼此了解并知道如何彼此通信),每个组件与单个对象进行对话:中介。 这个名字是故意选择的:当你和邻居打架并且无法与他交流时,你会看到一个调解员,而不是互相交谈,你们都会与试图解决问题的调解员交谈。
适配器用于将具有接口的对象“转换”为具有其他接口的对象。 就像,例如,一个电源适配器,将欧洲电源插座转换为美国电源插座,这样您就可以在欧洲使用您的美国剃须刀。 简单示例:您需要将Runnable存储到Callables列表中。 Runnable有一个方法run()。 Callable有一个方法call()。 因此,您创建一个适配器:
public class RunnableAdapter implements Callable {
private Runnable runnable;
public RunnableAdapter(Runnable runnable) {
this.runnable = runnable;
}
public void call() {
runnable.run();
}
}
JB Nizet已经写了一个很好的答案。 我只想用简单的词来解释差异:
当您不知道如何与其他对象通信或者您不被允许时,应该使用Mediator
当您确切知道如何与对象通信时,应使用适配器 ,但这些对象可能不支持某些通信方法或不同
Adapter Pattern
的时候,我们已经有两个代码库是一个有用的consumer code
和其他producer code
,但在格式 Consumer
希望产品是从什么不同Producer
的代码生成。 这里因为生产代码已经到位,我们不希望修改现有代码[代码已关闭以进行修改,为扩展而打开] 。 Adapter类可以将Producer生成的产品转换为Consumer代码所期望的格式。 格式可以是API,其返回类型根据生产者代码和消费者代码的期望而不同。 Adapter类使用生产者代码的API,并根据消费者的期望对其进行转换。
现在,当我们正在设计架构或重构时,Mediator模式非常有用。 它有助于轻松和松散地耦合对象的交互。 定义一个对象[Mediator],它封装了一组对象的交互方式 。 Mediator通过使对象明确地相互引用来促进松散耦合,并且它允许您独立地改变它们的交互。
有人可以对这两者进行比较,并指出确切的区别吗?
源代码制作链接中的意图和清单已在您的问题中引用,可提供良好的洞察力。
适配器将类的接口转换为客户期望的另一个接口
Mediator通过使对象明确地相互引用来促进松散耦合,并且它允许您独立地改变它们的交互。
是不是隐含地意味着mediator是一个支持2个以上类的适配器。 由于这个原因, Mediator不能充当适配器 。
Mediator不会将不兼容的接口转换为兼容接口,客户端期望与Adapter不同。
Mediator与相同接口的Collegues交互。
Mediator摘要/集中了Colleague对象之间的任意通信
相关帖子包含代码示例:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.