首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计模式.理解外观模式

设计模式.理解外观模式
EN

Stack Overflow用户
提问于 2017-11-02 20:19:29
回答 4查看 949关注 0票数 2

我是设计模式的新手,我正试图了解它们的典型外观。现在我正在试着理解正面的模式。我觉得Facade模式是一个相当宽泛的概念,所以我想知道我的第二个图表是否会被认为是Facade模板的一部分。

我知道一个典型的外观模式基本上如下所示(A类是外观):

但是,如果我们有一个更微妙的图表,像这样:

A级是否仍然被认为是一个正面类,还是取决于上下文?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-11-03 02:38:19

首先,为了理解外观,我喜欢把它看作是一种重构。想象一下,您的两个图都没有facade类。客户端必须与facade管理的所有类直接交互。因此,它们将更加复杂,具有更多的耦合性。

facade向客户端提供简化的服务(减少耦合),将复杂性隐藏在外观后面。

我最喜欢的示例(在Java中)是JOptionPane类。它并不存在于最早的Java版本中,如果您想要创建一个Yes/No问题对话框,您(作为客户端)必须管理对dialog、Button等的所有调用,以及处理事件等。所有这些复杂性都已简化为JOptionPane facade类中的静态方法。这是来自https://best-practice-software-engineering.ifs.tuwien.ac.at/patterns/facade.html的UML图

现在请回答你的问题:

A级是否仍然被认为是一个正面类,还是取决于上下文?

如果A正在向客户端提供简化的服务,从而有效地使用了BCFE等复杂子系统,那么客户端必须直接与所有这些子系统交互(耦合到)这些子系统,那么我会说A是一个外观。

票数 3
EN

Stack Overflow用户

发布于 2017-11-02 20:30:00

当然,在使用复合设计模式时也有例外,但通常情况下,尤其是在您的情况下,外观类不会改变。此外,可以在任何时候添加新的依赖项。希望这能有所帮助。

学习设计模式的伟大平台

票数 0
EN

Stack Overflow用户

发布于 2017-11-02 20:58:06

我想说的是,这取决于具体情况。

如果您是设计模式的新手,那么比描述设计模式的真实生活故事更能帮助您加快学习/理解主题。

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

https://stackoverflow.com/questions/47083977

复制
相关文章

相似问题

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