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

时间:2015-06-10 20:44:30

标签: java design-patterns facade mediator

Facade和mediator设计模式之间有什么区别。我想了解哪种设计模式可以在这两种场景中选择。我正在浏览以下链接,并在用例方面发现两者相同。

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

介体设计模式: http://www.java2s.com/Tutorial/Java/0460__Design-Pattern/CoordinatingYourObjectswiththeMediatorPatterns.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();
   }
}

Mediator类:

   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();
      }

4 个答案:

答案 0 :(得分:6)

Facade公开现有功能,中介器添加现有功能。

如果你看一下立面示例,你会发现你没有添加任何新功能,只是给当前对象一个新的视角。例如,Circle已经存在,您只是使用drawCircle方法抽象出圆圈。

如果查看您的mediator类,您会看到方法handle()通过检查状态提供了其他功能。如果您要取出条件,您将拥有一个外观模式,因为其他功能已经消失。

答案 1 :(得分:4)

外观模式为您提供了一个简单的界面,可以在一组连贯的类上进行交互。例如,你房子的遥控器可以控制你家里所有类型的设备。您只需与遥控器进行交互,遥控器就会确定哪个设备应该响应以及要发送什么信号。

中介模式负责两个对象之间的通信,而两个对象不需要直接相互引用。一个现实生活中的例子是发信,你发信,邮政服务捡起来,并确保它将在收件人送达。没有你告诉他们应该采取什么样的路线。那就是调解员所做的。

然而,您的示例听起来更像是创作模式(看起来像工厂)和行为模式(状态模式)。我理解你的困惑。

答案 2 :(得分:1)

Facade模式键注释:

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

    What is Facade Design Pattern?

    Mediator模式主要说明(dzone文章):

    1. 当对象之间的通信逻辑复杂时,Mediator模式非常有用,我们可以拥有一个负责通信逻辑的中心通信点。

    2. 我们不应该仅仅使用中介模式来实现失败耦合,因为如果调解员的数量增加,那么它们将难以维持

    3. 结构:

      enter image description here

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

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

      它了解所有Colleagues及其关于互通的目的。ConcreteColleague通过mediator与其他同事沟通。

      关于您的查询:

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

      2. 您的第二个示例并非真正意义上的Mediator模式。这些互动是硬编码的。您必须为这些接口定义接口和程序。有关dzone示例的更好理解,请参阅上面的Mediator文章。

答案 3 :(得分:0)

  

我对以下代码段感到困惑,这两个代码段在两种设计模式中看起来都很相似。

我认为你正在看到这两种模式的构成方面。

Facade 链接到子系统的各种现有类,以添加一些简化子系统使用的典型功能。在您引用的示例代码中,ShapeMaker提供了便于制作形状的服务。

Mediator 链接到需要合作的各个同事,以尽量减少同事之间的相互了解。最大限度地减少知识的副作用是减少同事之间的联系(他们只知道调解员)并增加他们的凝聚力(他们通常不必担心,因为他们不了解更大的情况)。

在这两种模式中,集中式类承担处理与其链接的类的复杂性的责任。

以下是Gang of Four中UML的基本模式:

Facade pattern

Mediator pattern