"Facade" 设计模式 vs "Facade" 架构

"Facade" design pattern vs "Facade" from architecture

Facade Design Pattern是否继承了Facade建筑学的概念?我的意思是在建筑学中,术语 Facade 通常代表任何建筑物的正面或外部。 Facade Design Pattern 在软件架构中是否也有这种用途?如果这是真的,这个概念是否也适用于 "Factory Pattern" vs "Factory""Bridge Pattern" vs "Bridge""Proxy Pattern" vs "Proxy" 和其他设计模式?

总的来说,是的。四人组图案的灵感来自 Christopher Alexander

Christopher Alexander is the architect who first studied patterns in buildings and communities and developed a "pattern language" for generating them.

我发现架构隐喻在很大程度上与软件设计平行。当然,没有比喻是完美的,因此您当然也可以找到差异。 GoF 指出,

Finding good names has been one of the hardest parts of developing our catalog.

Facade Pattern指过滤信息或壁垒大型实施/复杂细节。

它就像幕布或墙一样覆盖在一些复杂的方法或架构上,以便于访问。这就是 Facade Pattern 的显示方式(参见 "What's the Facade Pattern" 的答案 here)。您也可以通过 Facade,将一些方法或功能隐藏到您的 classes。

最好的例子之一是 Repository 模式。您可能会将所有数据库逻辑(DTO 到业务对象)隐藏在一些墙后面,因为有一天您可能会更改数据库(如 SQL 到 MySql 或 Oracle,SQL 到 EntityFramework).它隐藏一些东西,比如一堵墙,同时显示一些东西,比如 windows.

对于列表的其余部分,它非常适用。

  • Factory pattern 从特定上下文创建对象而不公开实例化的实现(您的 class 调用工厂不会创建,工厂会创建)
  • Bridge pattern 帮助实现 link 抽象和无依赖的实现(我想保存到多个数据库,但我想要一个入口点用于所有不同技术的实现)
  • Proxy pattern 在您现在可能不想创建的对象前面放置一个遮罩。

是的,几乎所有模式在某种程度上都有现实生活中的应用。

更一般地说,你问的是,“设计模式名称是否根据现实生活中的实体描述了它们的内部设计理念?

从概念上讲,答案是肯定的。在你的例子中

  • Facade表示隐藏一组内部entities/behaviors与协调器实体执行操作的场景。
  • Factory表示工厂实体produces/manufactures为你对象
  • 的场景
  • Bridge 表示如何连接两个相似但不同(断开连接)的实体的场景。
  • 适配器表示如何连接两个不同的不同实体的场景。

而且还要注意,这也要看个人的口味和个人的理解。例如 GoF 引入的 Interpreter 模式,其含义是它描述了一个典型的编程语言解释器(或编译器)。但通常术语 'Interpreter' 的意思类似于翻译器,因此人们常常会误解这种模式的含义。正因为如此,有些人认为它不是该模式的好名称,而像 'Expression' 这样的名称将是更好的选择。

因此,我们应该从上一点中学到的另一件事是,我们不应该直接根据自己的理解来处理模式名称所暗示的内容,因为它可能与它们的意思不同。我们应该先看看他们的真实想法。即他们建议的编程解决方案是什么。

例如:桥梁模式暗示着一座桥梁。但是在编程方面,它是用decoupling the abstraction from ones implementation实现的。