首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外观模式-请求流

外观模式-请求流
EN

Stack Overflow用户
提问于 2016-09-02 09:25:48
回答 2查看 296关注 0票数 1

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

我指的是下面关于外观模式的维基百科uml:

对Facade的通信/调用是单向请求,即只有Client1 1/Client1 2发送请求并接收来自Facade的响应,但是Facade不能向Client1 1/Client1 2 ?发起请求。

我说得对吗? Facade提供单向(客户端->外观)请求交互(通过更简单的接口),其中as Mediator促进了跨系统/类的双向(客户端<->中介)交互?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-02 16:24:54

是的,在这两方面你都是对的。这里是相关的引文,直接从GoF的书,第282页(强调我)。

Facade与Mediator的不同之处在于它抽象了一个对象子系统,以提供更方便的接口。的协议是单向;也就是说,Facade对象对子系统类进行请求,反之亦然。相反,Mediator支持同事对象不提供或不能提供的协作行为,和协议是多向

还请注意,外观被归类为一种结构模式,而Mediator则是一种行为模式。如果一个外观可以启动请求,这将使它成为行为。

票数 1
EN

Stack Overflow用户

发布于 2016-09-02 10:07:24

(1)对Facade的通信/调用是否是单向请求,即只有Client1 1/Client1 2发送请求并接收来自Facade的响应,但是Facade不能向Client1 1/Client1 2发起请求?

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

例如:

代码语言:javascript
复制
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提供单向(客户端->外观)请求交互(通过更简单的接口),其中as Mediator促进了跨系统/类的双向(Client <-> Mediator)交互?

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

(b)中介器有助于双向(客户端<->中介)交互,->正确。它类似于客户端也是子系统(在外观中)。:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39288926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档