在我看来,他们之间没有太多共同点。
中介者模式用于避免将多个组件耦合在一起。每个组件不直接“交流”(从而需要相互了解和知道如何彼此交流),而是与单个对象——中介者交流。这个名称是有意选择的:当你与邻居发生冲突并且无法沟通时,你找一个调解员,而不是互相交谈,双方都与调解员交谈,试图解决问题。
适配器用于将具有一种接口的对象“转换”为具有其他接口的对象。就像一个电源适配器将欧洲插座转换成美国插座一样,这样您就可以在欧洲使用您的美国剃须刀。 简单的例子:您需要将Runnable存储到Callable列表中。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已经给出了一个很好的答案。我只想用更简单的话解释一下它们的区别:
中介者模式应该在你不知道如何与其他对象通信或者不被允许与其通信时使用。
适配器模式应该在你知道如何与对象进行通信,但这些对象可能不支持某些通信方法或者存在差异时使用。
适配器模式
在我们已经有两个代码库,一个是消费者代码
,另一个是生产者代码
,但是消费者希望产品的格式与生产者生产的不同
时非常有用。这里生产代码已经存在并且我们不希望修改现有的代码[关闭修改,开放扩展]
。 适配器类可以将生产者生成的产品转换为消费者代码所期望的格式。 格式可能是API,根据生产者代码和消费者代码的期望返回类型不同。适配器类使用生产者代码的API并按照消费者的期望进行转换。
现在,中介者模式
在设计架构或重构过程中很有用。它有助于对象之间的轻松和松散耦合交互。定义一个对象[中介者],封装了一组对象的交互方式。 中介者通过保持对象不会直接相互引用来促进松散耦合,同时可以使您独立地改变它们的交互。
utils
模块那样的工作,这可能更适合外观。它们都非常相似,但没有考虑规模、细微差别或意图。 - Cody