繁体   English   中英

'Adapter'和'Mediator'模式之间的确切区别是什么?

[英]What is the exact difference between 'Adapter' and 'Mediator" patterns?

我知道适配器是一种结构模式,而Mediator是一种行为模式。 但据我所知,他们两人正在做的是连接两个(或更多)其他类,这些类可能与直接通信不兼容(不可维护)。

有人可以对这两者进行比较,并指出确切的区别吗?

这些是TutorialsPoint中AdapterMediator解释的链接。

这些都是来源制作的解释。 适配器调解器

他们没有太多共同点,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不能充当适配器

  1. Mediator不会将不兼容的接口转换为兼容接口,客户端期望与Adapter不同。

  2. Mediator与相同接口的Collegues交互。

  3. Mediator摘要/集中了Colleague对象之间的任意通信

相关帖子包含代码示例:

Mediator Vs Observer面向对象的设计模式

桥模式和适配器模式之间的差异

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM