'Adapter' 和“中介者”模式之间的确切区别是什么?
What is the exact difference between 'Adapter' and 'Mediator" patterns?
我知道 Adapter 是一种结构模式,Mediator 是一种行为模式。但据我所知,他们两个都在做的是连接两个(或更多)其他 类,这些 类 可能不兼容(不太可维护)以进行直接通信。
有人可以对这两者进行仔细比较并指出确切的区别吗?
他们没有太多共同点,IMO。
调解器用于避免将多个组件耦合在一起。与每个组件 "talking" 直接相互(因此必须相互了解并知道如何相互通信)不同,每个组件都与一个对象对话:调解器。这个名字是故意选择的:当你和你的邻居打架并且无法与他沟通时,你会去找调解员而不是互相交谈,你们都与调解员交谈,调解员试图解决问题。
适配器用于"transform" 将具有一个接口的对象转换为具有另一个接口的对象。就像,例如,将欧洲电源插座转换为美国电源插座的电源适配器,以便您可以在欧洲使用您的美国剃须刀。
简单示例:您需要将一个 Runnable 存储到一个 Callable 列表中。 Runnable 有一个方法 运行()。 Callable 有一个方法 call()。因此,您创建了一个适配器:
public class RunnableAdapter implements Callable {
private Runnable runnable;
public RunnableAdapter(Runnable runnable) {
this.runnable = runnable;
}
public void call() {
runnable.run();
}
}
Adapter Pattern
当我们已经有两个代码库一个 consumer code
和另一个 producer code
但是 format 其中 Consumer
希望产品与 Producer
代码生成的产品不同。 这里因为生产代码已经存在,我们不希望修改现有代码[代码修改关闭,扩展开放]。 Adapter class 可以将 Producer 生产的产品转换成 Consumer 代码所期望的格式。 格式可能是 return 类型不同的 API根据生产者代码和消费者代码的期望。适配器 class 使用生产者代码的 API 并根据消费者的期望转换它们。
现在Mediator模式在我们设计架构或者重构的过程中很有用。它有助于轻松和松散耦合的对象交互。定义一个 对象 [Mediator],它封装了一组对象如何交互 。调解器通过防止对象相互显式引用来促进松散耦合,它允许您独立地改变它们的交互。
JB Nizet 已经写了一个很好的答案。我只想用更简单的词来解释差异:
当你不知道时,应该使用Mediator如何与其他对象通信,否则您 不允许 到
适配器应该在你知道时使用与对象通信,但这些对象可能不支持某些通信方法或不同
Can some one give a close comparison between these two and point out the exact difference?
sourcemaking 链接中的 intent 和 checklist 已在您的问题中引用,提供了很好的见解。
Adapter 将 class 的接口转换为客户端期望的另一个接口
Mediator 通过防止对象显式地相互引用来促进松散耦合,它允许您独立地改变它们的交互。
isn't there something that implicitly means that mediator is an adapter that supports for than 2 classes. Due to this reason, Mediator can't act as an Adapter.
Mediator 不会将不兼容的接口转换为兼容的接口,这与 Adapter 不同。
Mediator 与同一界面的 Collegues 交互。
Mediatorabstracts/centralizes同事对象之间的任意通信
带有代码示例的相关帖子:
Mediator Vs Observer Object-Oriented Design Patterns
Difference between Bridge pattern and Adapter pattern
我知道 Adapter 是一种结构模式,Mediator 是一种行为模式。但据我所知,他们两个都在做的是连接两个(或更多)其他 类,这些 类 可能不兼容(不太可维护)以进行直接通信。
有人可以对这两者进行仔细比较并指出确切的区别吗?
他们没有太多共同点,IMO。
调解器用于避免将多个组件耦合在一起。与每个组件 "talking" 直接相互(因此必须相互了解并知道如何相互通信)不同,每个组件都与一个对象对话:调解器。这个名字是故意选择的:当你和你的邻居打架并且无法与他沟通时,你会去找调解员而不是互相交谈,你们都与调解员交谈,调解员试图解决问题。
适配器用于"transform" 将具有一个接口的对象转换为具有另一个接口的对象。就像,例如,将欧洲电源插座转换为美国电源插座的电源适配器,以便您可以在欧洲使用您的美国剃须刀。 简单示例:您需要将一个 Runnable 存储到一个 Callable 列表中。 Runnable 有一个方法 运行()。 Callable 有一个方法 call()。因此,您创建了一个适配器:
public class RunnableAdapter implements Callable {
private Runnable runnable;
public RunnableAdapter(Runnable runnable) {
this.runnable = runnable;
}
public void call() {
runnable.run();
}
}
Adapter Pattern
当我们已经有两个代码库一个 consumer code
和另一个 producer code
但是 format 其中 Consumer
希望产品与 Producer
代码生成的产品不同。 这里因为生产代码已经存在,我们不希望修改现有代码[代码修改关闭,扩展开放]。 Adapter class 可以将 Producer 生产的产品转换成 Consumer 代码所期望的格式。 格式可能是 return 类型不同的 API根据生产者代码和消费者代码的期望。适配器 class 使用生产者代码的 API 并根据消费者的期望转换它们。
现在Mediator模式在我们设计架构或者重构的过程中很有用。它有助于轻松和松散耦合的对象交互。定义一个 对象 [Mediator],它封装了一组对象如何交互 。调解器通过防止对象相互显式引用来促进松散耦合,它允许您独立地改变它们的交互。
JB Nizet 已经写了一个很好的答案。我只想用更简单的词来解释差异:
-
当你不知道时,应该使用
Mediator如何与其他对象通信,否则您 不允许 到
适配器应该在你知道时使用与对象通信,但这些对象可能不支持某些通信方法或不同
Can some one give a close comparison between these two and point out the exact difference?
sourcemaking 链接中的 intent 和 checklist 已在您的问题中引用,提供了很好的见解。
Adapter 将 class 的接口转换为客户端期望的另一个接口
Mediator 通过防止对象显式地相互引用来促进松散耦合,它允许您独立地改变它们的交互。
isn't there something that implicitly means that mediator is an adapter that supports for than 2 classes. Due to this reason, Mediator can't act as an Adapter.
Mediator 不会将不兼容的接口转换为兼容的接口,这与 Adapter 不同。
Mediator 与同一界面的 Collegues 交互。
Mediatorabstracts/centralizes同事对象之间的任意通信
带有代码示例的相关帖子:
Mediator Vs Observer Object-Oriented Design Patterns
Difference between Bridge pattern and Adapter pattern