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

时间:2016-06-12 12:27:06

标签: oop design-patterns adapter object-oriented-analysis mediator

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

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

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

这些是源代码解释。 AdapterMediator

4 个答案:

答案 0 :(得分:5)

他们没有多少共同点,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();
    }
}

答案 1 :(得分:5)

JB Nizet已经写好了答案。我只想用更简单的词来解释差异:

    当您 不知道 如何与其他对象进行通信或时,应使用
  • 调解器 不允许

  • 你知道 确切地知道如何与对象通信时,应该使用
  • 适配器,但这些对象可能不支持某些通信方法或者不同

答案 2 :(得分:3)

当我们已经有两个代码库Adapter Pattern和其他consumer code格式,其中producer code希望产品时,

Consumer非常有用与Producer代码产生的不同。 这里因为生产代码已经到位,我们不希望修改现有代码[代码已关闭以进行修改,为扩展而打开] 适配器类可以将Producer生成的产品转换为消费者代码所期望的格式。格式可能是API软管返回类型根据生产者代码返回的内容以及消费者代码所期望的内容而不同。 Adapter类使用生产者代码的API,并根据消费者的期望对其进行转换。 enter image description here

现在,当我们正在设计架构或重构时,Mediator模式非常有用。它有助于轻松和松散地耦合对象的交互。定义一个对象[Mediator],它封装了一组对象的交互方式。 Mediator通过使对象明确地相互引用来促进松散耦合,并且它允许您独立地改变它们的交互。 enter image description here

答案 3 :(得分:1)

  

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

源代码制作链接中的 intent 核对清单已在您的问题中引用,可提供良好的洞察力。

适配器 将类的接口转换为客户期望的另一个接口

Mediator 通过保持对象明确引用彼此来促进松散耦合,并且它允许您独立地改变其交互。

  

不存在隐含意味着mediator是一个支持2个以上类的适配器。由于这个原因, Mediator 不能充当适配器

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

  2. Mediator 与同一界面的 Collegues 进行交互。

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

  4. 带代码示例的相关帖子:

    Mediator Vs Observer Object-Oriented Design Patterns

    Difference between Bridge pattern and Adapter pattern