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

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

A级是否仍然被认为是一个正面类,还是取决于上下文?
发布于 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正在向客户端提供简化的服务,从而有效地使用了B、C、F和E等复杂子系统,那么客户端必须直接与所有这些子系统交互(耦合到)这些子系统,那么我会说A是一个外观。
发布于 2017-11-02 20:30:00
当然,在使用复合设计模式时也有例外,但通常情况下,尤其是在您的情况下,外观类不会改变。此外,可以在任何时候添加新的依赖项。希望这能有所帮助。
发布于 2017-11-02 20:58:06
我想说的是,这取决于具体情况。
如果您是设计模式的新手,那么比描述设计模式的真实生活故事更能帮助您加快学习/理解主题。
https://stackoverflow.com/questions/47083977
复制相似问题