Sup*_*hne 8 oop design-patterns adapter mediator object-oriented-analysis
我知道适配器是一种结构模式,而Mediator是一种行为模式.但据我所知,他们两人正在做的是连接两个(或更多)其他类,这些类可能与直接通信不兼容(不可维护).
有人可以对这两者进行比较,并指出确切的区别吗?
他们没有太多共同点,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)
JB Nizet已经写好了答案.我只想用更简单的词来解释差异:
调解时,应使用你不知道如何与其他对象进行通信,或者你不容许以
当您 确切知道如何与对象通信时,应使用适配器,但这些对象可能不支持某些通信方法或不同
Adapter Pattern当我们已经有两个代码库,但希望产品采用的格式与代码生成的格式不同时,这很有用consumer code。这里,生产代码已经就位,我们不希望修改现有代码[代码关闭修改,开放扩展]。Adapter类可以将Producer生产的产品转换为Consumer代码期望的格式。格式可能是 API,其返回类型根据生产者代码和消费者代码的期望而不同。适配器类使用生产者代码的 API 并根据消费者的期望对其进行转换。producer codeConsumerProducer
现在,当我们在设计架构或重构时,中介者模式非常有用。它有助于对象之间轻松且松散耦合的交互。定义一个对象[Mediator],它封装了一组对象如何交互。中介器通过防止对象显式地相互引用来促进松散耦合,并且它允许您独立地改变它们的交互。
