Facade 和 Mediator 设计模式之间的区别?

Difference between Facade and Mediator Design pattern?

门面和中介设计模式有什么区别。我想了解在哪种情况下在这两种模式之间选择哪种设计模式。我浏览了以下链接,发现它们在用例方面是相同的。

外观设计模式:http://www.tutorialspoint.com/design_pattern/facade_pattern.htm

中介者设计模式: http://www.java2s.com/Tutorial/Java/0460__Design-Pattern/CoordinatingYourObjectswiththeMediatorPatterns.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模式关键点:

  1. 访问复杂系统需要一个简单的界面。
  2. 子系统的抽象和实现是紧密耦合的。
  3. 需要每个级别的分层软件的入口点。
  4. 系统非常复杂或难以理解。

相关post:

What is Facade Design Pattern?

Mediator pattern key notes(dzone文章):

  1. 当对象之间的通信逻辑很复杂时,中介者模式很有用,我们可以有一个通信中心点来处理通信逻辑。

  2. 我们不应该仅仅为了实现失耦合而使用中介者模式,因为如果中介者的数量增加,那么维护它们将变得困难

结构:

Mediator 定义了 Colleague 对象之间通信的接口。

ConcreteMediator 实现 Mediator 接口并协调 Colleague 对象之间的通信。

它知道所有 Colleagues 和他们的目的 communication.The ConcreteColleague 通过 mediator.

与其他同事交流

关于您的查询:

  1. 您的第一个示例代表 Facade 模式。 ShapeMaker 是复杂系统的入口点,它由各种 Shape 子系统组成。

  2. 你的第二个例子并不代表真正意义上的 Mediator 模式。交互是硬编码的。您必须为这些接口定义接口和程序。请参阅上面的 dzone 文章以更好地理解 Mediator 示例。