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

Sup*_*hne 8 oop design-patterns adapter mediator object-oriented-analysis

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

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

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

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

JB *_*zet 7

他们没有太多共同点,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();
    }
}
Run Code Online (Sandbox Code Playgroud)


Dzi*_*mau 6

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

  • 调解时,应使用你不知道如何与其他对象进行通信,或者你不容许

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


nit*_*.kk 5

Adapter Pattern当我们已经有两个代码库,但希望产品采用的格式与代码生成的格式不同时,这很有consumer code这里,生产代码已经就位,我们不希望修改现有代码[代码关闭修改,开放扩展]Adapter类可以将Producer生产的产品转换为Consumer代码期望的格式。格式可能是 API,其返回类型根据生产者代码和消费者代码的期望而不同。适配器类使用生产者代码的 API 并根据消费者的期望对其进行转换。producer codeConsumerProducer在此输入图像描述

现在,当我们在设计架构或重构时,中介者模式非常有用。它有助于对象之间轻松且松散耦合的交互。定义一个对象[Mediator],它封装了一组对象如何交互。中介器通过防止对象显式地相互引用来促进松散耦合,并且它允许您独立地改变它们的交互。 在此输入图像描述