Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Facade模式-请求流_Java_Design Patterns_Facade_Mediator - Fatal编程技术网

Java Facade模式-请求流

Java Facade模式-请求流,java,design-patterns,facade,mediator,Java,Design Patterns,Facade,Mediator,我知道Facade模式通过隐藏复杂的子系统交互来提供更简单的接口 我指的是以下wikipedia uml on Facade模式: 到门面的通信/调用是否为单向请求,即只有Client1/Client2发送请求并从门面接收响应, 但是Facade无法向Client1/Client2发起请求? 我说Facade提供单向(客户机->Facade)请求交互(通过更简单的接口)是正确的吗?其中as中介促进了跨系统/类的双向(客户机中介)交互 你能提供一个强调这一点的参考吗? (1) 与门面的通信/呼叫

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

我指的是以下wikipedia uml on Facade模式:

到门面的通信/调用是否为单向请求,即只有Client1/Client2发送请求并从门面接收响应, 但是Facade无法向Client1/Client2发起请求?

我说Facade提供单向(客户机->Facade)请求交互(通过更简单的接口)是正确的吗?其中as中介促进了跨系统/类的双向(客户机中介)交互

你能提供一个强调这一点的参考吗?

(1) 与门面的通信/呼叫是否是单向的 请求,即只有Client1/Client2发送请求并接收请求 来自Facade的响应,但Facade无法向 客户1/客户2

对。这就是为什么他们被称为客户。Facade类是为客户机工作的实际服务器(不要不必要地与web服务器混合)。当客户端不需要知道实际发生了什么,而只需要一个高级抽象时,Facade是有意义的

例:

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

(2) 我说的立面提供单向性是正确的吗 (客户端->外观)请求交互(通过更简单的接口),其中 as中介促进双向(客户端中介) 跨系统/类的交互

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


(b) 中介促进双向(客户端中介)交互->正确。这有点像客户端也是子系统(在Facade中)。:)

是的,你在这两方面都是正确的。以下是相关的引文,直接摘自GoF书籍,第282页(我的重点)

Facade与Mediator的不同之处在于它抽象了对象的子系统 提供更方便的界面其协议是单向的;也就是说,Facade对象对子系统类发出请求,但反之亦然。在里面 相反,Mediator支持同事对象不支持或不支持的合作行为 无法提供,且协议是多向的


还要注意,Facade被分类为一种结构模式,而Mediator是一种行为模式。如果Facade可以启动请求,那么它将是行为化的。

谢谢,但是您能提供一个强调这一点的参考吗?Facade->Mediator->
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();
   }
}