Facade 和 Mediator 设计模式之间的区别?
Difference between Facade and Mediator Design pattern?
门面和中介设计模式有什么区别。我想了解在哪种情况下在这两种模式之间选择哪种设计模式。我浏览了以下链接,发现它们在用例方面是相同的。
外观设计模式:http://www.tutorialspoint.com/design_pattern/facade_pattern.htm
我对以下在两种设计模式中看起来相似的代码段感到困惑。
门面 class:
public class ShapeMaker {
private Shape circle;
private Shape rectangle;
private Shape square;
public ShapeMaker() {
circle = new Circle();
rectangle = new Rectangle();
square = new Square();
}
public void drawCircle(){
circle.draw();
}
public void drawRectangle(){
rectangle.draw();
}
public void drawSquare(){
square.draw();
}
}
调解员class:
public class Mediator {
Welcome welcome;
Browse browse;
Purchase purchase;
Exit exit;
public Mediator() {
welcome = new Welcome(this);
browse = new Browse(this);
purchase = new Purchase(this);
exit = new Exit(this);
}
public void handle(String state) {
if (state.equals("welcome.shop")) {
browse.execute();
} else if (state.equals("shop.purchase")) {
purchase.execute();
} else if (state.equals("purchase.exit")) {
exit.execute();
}
外观公开现有功能,调解器添加现有功能。
如果您查看外观示例,您会发现您没有添加任何新功能,只是为当前对象提供了一个新视角。例如,Circle 已经存在,而您只是使用 drawCircle 方法抽象出 circle。
如果您查看调解器 class,您会发现方法 handle()
通过检查状态提供了额外的功能。如果你要去掉条件,你就会有一个门面模式,因为附加的功能已经消失了。
外观模式 为您提供了一个简单的界面,该界面在一组连贯的 类 上进行交互。例如,用于控制您家中所有设备的房屋遥控器将是一个立面。您只需与遥控器交互,遥控器就会计算出应该响应哪个设备以及发送什么信号。
中介模式负责两个对象之间的通信,两个对象不需要直接相互引用。一个现实生活中的例子是发送一封信,您 post 您的信件和 postal 服务接收它并确保将其交付给收件人。没有你告诉他们他们应该走哪条路。那是调解员做的。
然而,您的示例听起来更像是一种创建模式(看起来像工厂)和一种行为模式(状态模式)。我理解你的困惑。
I have confusion in following code segment which looks similar in both the design patterns.
我认为您看到了两种模式的组成方面。
Facade 链接到子系统的各种现有 classes,以添加一些简化子系统使用的典型功能。在您引用的示例代码中,ShapeMaker
提供有助于制作形状的服务。
Mediator链接到需要协作的各个同事,以尽量减少同事之间的了解。最小化知识的副作用是减少同事之间的耦合(他们只知道调解人)和增加他们的凝聚力(他们通常不用担心,因为他们不了解大局)。
在这两种模式中,集中式 class 承担了处理它链接到的 classes 的复杂性的责任。
以下是来自四人帮的 UML 基本模式:
Facade模式关键点:
- 访问复杂系统需要一个简单的界面。
- 子系统的抽象和实现是紧密耦合的。
- 需要每个级别的分层软件的入口点。
- 系统非常复杂或难以理解。
相关post:
What is Facade Design Pattern?
Mediator pattern key notes(dzone文章):
当对象之间的通信逻辑很复杂时,中介者模式很有用,我们可以有一个通信中心点来处理通信逻辑。
我们不应该仅仅为了实现失耦合而使用中介者模式,因为如果中介者的数量增加,那么维护它们将变得困难
结构:
Mediator
定义了 Colleague
对象之间通信的接口。
ConcreteMediator
实现 Mediator
接口并协调 Colleague
对象之间的通信。
它知道所有 Colleagues
和他们的目的 communication.The ConcreteColleague
通过 mediator
.
与其他同事交流
关于您的查询:
您的第一个示例代表 Facade
模式。 ShapeMaker
是复杂系统的入口点,它由各种 Shape
子系统组成。
你的第二个例子并不代表真正意义上的 Mediator
模式。交互是硬编码的。您必须为这些接口定义接口和程序。请参阅上面的 dzone
文章以更好地理解 Mediator
示例。
门面和中介设计模式有什么区别。我想了解在哪种情况下在这两种模式之间选择哪种设计模式。我浏览了以下链接,发现它们在用例方面是相同的。
外观设计模式:http://www.tutorialspoint.com/design_pattern/facade_pattern.htm
我对以下在两种设计模式中看起来相似的代码段感到困惑。
门面 class:
public class ShapeMaker {
private Shape circle;
private Shape rectangle;
private Shape square;
public ShapeMaker() {
circle = new Circle();
rectangle = new Rectangle();
square = new Square();
}
public void drawCircle(){
circle.draw();
}
public void drawRectangle(){
rectangle.draw();
}
public void drawSquare(){
square.draw();
}
}
调解员class:
public class Mediator {
Welcome welcome;
Browse browse;
Purchase purchase;
Exit exit;
public Mediator() {
welcome = new Welcome(this);
browse = new Browse(this);
purchase = new Purchase(this);
exit = new Exit(this);
}
public void handle(String state) {
if (state.equals("welcome.shop")) {
browse.execute();
} else if (state.equals("shop.purchase")) {
purchase.execute();
} else if (state.equals("purchase.exit")) {
exit.execute();
}
外观公开现有功能,调解器添加现有功能。
如果您查看外观示例,您会发现您没有添加任何新功能,只是为当前对象提供了一个新视角。例如,Circle 已经存在,而您只是使用 drawCircle 方法抽象出 circle。
如果您查看调解器 class,您会发现方法 handle()
通过检查状态提供了额外的功能。如果你要去掉条件,你就会有一个门面模式,因为附加的功能已经消失了。
外观模式 为您提供了一个简单的界面,该界面在一组连贯的 类 上进行交互。例如,用于控制您家中所有设备的房屋遥控器将是一个立面。您只需与遥控器交互,遥控器就会计算出应该响应哪个设备以及发送什么信号。
中介模式负责两个对象之间的通信,两个对象不需要直接相互引用。一个现实生活中的例子是发送一封信,您 post 您的信件和 postal 服务接收它并确保将其交付给收件人。没有你告诉他们他们应该走哪条路。那是调解员做的。
然而,您的示例听起来更像是一种创建模式(看起来像工厂)和一种行为模式(状态模式)。我理解你的困惑。
I have confusion in following code segment which looks similar in both the design patterns.
我认为您看到了两种模式的组成方面。
Facade 链接到子系统的各种现有 classes,以添加一些简化子系统使用的典型功能。在您引用的示例代码中,ShapeMaker
提供有助于制作形状的服务。
Mediator链接到需要协作的各个同事,以尽量减少同事之间的了解。最小化知识的副作用是减少同事之间的耦合(他们只知道调解人)和增加他们的凝聚力(他们通常不用担心,因为他们不了解大局)。
在这两种模式中,集中式 class 承担了处理它链接到的 classes 的复杂性的责任。
以下是来自四人帮的 UML 基本模式:
Facade模式关键点:
- 访问复杂系统需要一个简单的界面。
- 子系统的抽象和实现是紧密耦合的。
- 需要每个级别的分层软件的入口点。
- 系统非常复杂或难以理解。
相关post:
What is Facade Design Pattern?
Mediator pattern key notes(dzone文章):
当对象之间的通信逻辑很复杂时,中介者模式很有用,我们可以有一个通信中心点来处理通信逻辑。
我们不应该仅仅为了实现失耦合而使用中介者模式,因为如果中介者的数量增加,那么维护它们将变得困难
结构:
Mediator
定义了 Colleague
对象之间通信的接口。
ConcreteMediator
实现 Mediator
接口并协调 Colleague
对象之间的通信。
它知道所有 Colleagues
和他们的目的 communication.The ConcreteColleague
通过 mediator
.
关于您的查询:
您的第一个示例代表
Facade
模式。ShapeMaker
是复杂系统的入口点,它由各种Shape
子系统组成。你的第二个例子并不代表真正意义上的
Mediator
模式。交互是硬编码的。您必须为这些接口定义接口和程序。请参阅上面的dzone
文章以更好地理解Mediator
示例。