当前位置: 首页 > 知识库问答 >
问题:

Facade和Mediator设计模式的区别?

桂志诚
2023-03-14

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

立面设计图案: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();
   }
}
   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();
      }

共有3个答案

司马俊晖
2023-03-14

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

我想你看到了这两种模式的构图方面。

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

调解员链接到必须协作的各种同事,以尽量减少同事之间的相互了解。最小化知识的副作用是减少同事之间的耦合(他们只知道调解人),增加他们的凝聚力(他们通常不用担心,因为他们不了解全局)。

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

以下是四人帮UML中的基本模式:

申辉
2023-03-14

立面模式为您提供了一个简单的界面,它在一组连贯的类上进行交互。例如,你家的遥控器可以控制你家所有类型的设备,这就是一个立面。你只需与遥控器交互,遥控器就会计算出哪个设备应该响应以及发送什么信号。

中介模式负责两个对象之间的通信,而不需要这两个对象直接相互引用。现实生活中的一个例子是寄一封信,你把信寄出去,然后邮政服务会把它捡起来,并确保它会送到收件人手中。不用你告诉他们应该走哪条路。这就是调解人的工作。

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

水睿
2023-03-14

facade公开了现有功能,中介添加了现有功能。

如果您查看facade示例,您将看到您没有添加任何新功能,只是为当前对象提供了一个新的视角。例如,Circle已经存在,您只是使用drawCircle方法从圆中抽象出来。

如果您查看您的mediator类,您会看到方法< code>handle()通过检查状态提供了额外的功能。如果你去掉这些条件,你就会有一个facade模式,因为附加的功能已经没有了。

 类似资料:
  • 设计模式之Mediator(中介者) Mediator定义: 用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator? 各个对象之间的交互操作非常多;每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉及到修改很多其他对象的行为,如果使用Mediator模式,可以使各个对象间的耦合松散,只需关心和 Mediator的关系,使多对多的关系变成了一对多的关系,可以降低系统的复

  • 为子系统中的一组接口提供一个一致的界面,Facade一个典型应用就是数据库JDBC的应用,如下例对数据库的操作: public class DBCompare { Connection conn = null; PreparedStatement prep = null; ResultSet rset = null; try { Class.forName(

  • 本文向大家介绍java设计模式之外观模式(Facade),包括了java设计模式之外观模式(Facade)的使用技巧和注意事项,需要的朋友参考一下 概述 外部与内部子系统通信时必须通过的一个统一的外观模式对象进行,就是外观模式,也称门面模式。一般而言,Facade模式是为了降低客户端与实现化层之间的依赖性。外观模式的用意是为子系统提供一个集中化和简化的沟通渠道。 UML类图 在上面的UML图中,出

  • 本文向大家介绍Java设计模式之中介者模式(Mediator Pattern)简介,包括了Java设计模式之中介者模式(Mediator Pattern)简介的使用技巧和注意事项,需要的朋友参考一下 Java设计模式的中介者模式是行为模式之一。定义一个中介对象来封装系列对象之间的交互。中介者使各个对象不需要显式地相互引用,从而使其耦合性松散,并且可以独立地改变他们之间的交互。 如下图所示: 生产者

  • 问题内容: 我最近正在读《 学习JavaScript设计模式》 这本书。我没有得到的是模块模式和显示模块模式之间的区别。我觉得他们是同一回事。有人可以举一个例子吗? 问题答案: 至少有三种不同的方法来实现模块模式,但是显示模块模式是唯一具有正式名称的模块模式后代。 基本模块模式 模块模式必须满足以下条件: 私有成员住在封闭中。 公共成员暴露在返回对象中。 但是这个定义有很多歧义。通过以不同方式解决

  • 本文向大家介绍解析C#设计模式编程中外观模式Facade Pattern的应用,包括了解析C#设计模式编程中外观模式Facade Pattern的应用的使用技巧和注意事项,需要的朋友参考一下 实例引入 在家庭影院中,有灯光,屏幕,投影机,功放机,DVD 播放器这几个基本的工具: 灯光,可以关闭灯光和打开灯光。 投影机,可以打开和关闭投影机。 屏幕,可以打开和关闭。 功放机,可以关闭音量和打开音量。