外观模式 - 请求流程

时间:2016-09-02 09:25:48

标签: java design-patterns facade mediator

我知道Facade模式用于通过隐藏复杂的子系统交互来提供更简单的接口。

我在Facade模式中引用了以下维基百科uml:

enter image description here

对Facade的通信/呼叫是否是单向请求,即只有Client1 / Client2发送请求并从Facade接收响应, 但Facade无法向Client1 / Client2发起请求?

我是否正确地说Facade提供单向(客户端 - > Facade)请求交互(通过更简单的界面),其中Mediator促进跨系统的双向(客户端 - 介体)交互/ classes?

您能提供一个强调这一点的参考资料吗?

2 个答案:

答案 0 :(得分:1)

  

(1)Facade的通信/呼叫是否是单向的   请求,即只有Client1 / Client2发送请求并接收请求   Facade的回复,但Facade无法发起请求   Client1 / Client2?

正确。这就是他们被称为客户的原因。 Facade类是为客户完成工作的实际服务器(不必与Web服务器故事混合)。当客户不需要知道实际发生的事情而只是高级抽象时,Facade是有意义的。

例如:

public class Bulb{

    public void on(){
        //logic to turn on the bulb.
    }

    public void off(){
        //logic to turn off the bulb.
    }

}

public class Fan{

    public void on(){
        //logic to turn on the fan.
    }

     public void off(){
        //logic to turn off the fan.
    }

}

public class Room{

   private Bulb bulb;
   private Fan fan;

   public void powerOff(){
        this.bulb.off();
        this.fan.off();
   }
}

在此示例中,作为客户端,我只想调用room.powerOff();。我对内部发生的事情不感兴趣。

  

(2)我说Facade提供单向性是正确的   (客户端 - > Facade)请求交互(通过更简单的界面)在哪里   作为Mediator促进双向(客户< - > Mediator)   跨系统/类的交互?

(a)Facade提供单向(客户端 - > Facade)请求交互(通过更简单的界面) - >正确的。

(b)调解员促进双向(客户 - 调解员)交互 - >正确。它类似于客户端也是子系统(在Facade中)。 :))

答案 1 :(得分:1)

是的,你在两个方面都是正确的。以下是相关的引用,直接来自GoF书,第282页(强调我的)。

  

Facade与Mediator的不同之处在于它抽象了一个对象的子系统   提供更方便的界面。 其协议是单向的;也就是说,Facade对象发出子系统类的请求,反之则不然。在   相比之下,Mediator实现了同事对象没有或没有的合作行为   无法提供,且协议是多方向的

另请注意,Facade被归类为结构模式,而Mediator则是行为模式。如果Facade可以发起请求,那将使其成为行为。