Facade和mediator设计模式之间有什么区别。我想了解哪种设计模式可以在这两种场景中选择。我正在浏览以下链接,并在用例方面发现两者相同。
外观设计模式:http://www.tutorialspoint.com/design_pattern/facade_pattern.htm
我对以下代码段感到困惑,这两个代码段在两种设计模式中看起来都很相似。
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();
}
}
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();
}
答案 0 :(得分:6)
Facade公开现有功能,中介器添加现有功能。
如果你看一下立面示例,你会发现你没有添加任何新功能,只是给当前对象一个新的视角。例如,Circle已经存在,您只是使用drawCircle方法抽象出圆圈。
如果查看您的mediator类,您会看到方法handle()
通过检查状态提供了其他功能。如果您要取出条件,您将拥有一个外观模式,因为其他功能已经消失。
答案 1 :(得分:4)
外观模式为您提供了一个简单的界面,可以在一组连贯的类上进行交互。例如,你房子的遥控器可以控制你家里所有类型的设备。您只需与遥控器进行交互,遥控器就会确定哪个设备应该响应以及要发送什么信号。
中介模式负责两个对象之间的通信,而两个对象不需要直接相互引用。一个现实生活中的例子是发信,你发信,邮政服务捡起来,并确保它将在收件人送达。没有你告诉他们应该采取什么样的路线。那就是调解员所做的。
然而,您的示例听起来更像是创作模式(看起来像工厂)和行为模式(状态模式)。我理解你的困惑。
答案 2 :(得分:1)
Facade模式键注释:
相关文章:
What is Facade Design Pattern?
Mediator模式主要说明(dzone文章):
当对象之间的通信逻辑复杂时,Mediator模式非常有用,我们可以拥有一个负责通信逻辑的中心通信点。
我们不应该仅仅使用中介模式来实现失败耦合,因为如果调解员的数量增加,那么它们将难以维持
结构:
Mediator
定义Colleague
个对象之间的通信接口。
ConcreteMediator
实现Mediator
接口并协调Colleague
个对象之间的通信。
它了解所有Colleagues
及其关于互通的目的。ConcreteColleague
通过mediator
与其他同事沟通。
关于您的查询:
您的第一个示例代表Facade
模式。 ShapeMaker
是复杂系统的入口点,它由各种Shape
子系统组成。
您的第二个示例并非真正意义上的Mediator
模式。这些互动是硬编码的。您必须为这些接口定义接口和程序。有关dzone
示例的更好理解,请参阅上面的Mediator
文章。
答案 3 :(得分:0)
我对以下代码段感到困惑,这两个代码段在两种设计模式中看起来都很相似。
我认为你正在看到这两种模式的构成方面。
Facade 链接到子系统的各种现有类,以添加一些简化子系统使用的典型功能。在您引用的示例代码中,ShapeMaker
提供了便于制作形状的服务。
Mediator 链接到需要合作的各个同事,以尽量减少同事之间的相互了解。最大限度地减少知识的副作用是减少同事之间的联系(他们只知道调解员)并增加他们的凝聚力(他们通常不必担心,因为他们不了解更大的情况)。
在这两种模式中,集中式类承担处理与其链接的类的复杂性的责任。
以下是Gang of Four中UML的基本模式: