Design patterns 设计模式-立面

Design patterns 设计模式-立面,design-patterns,Design Patterns,立面设计模式以“关联”为中心,而不是以继承为中心,对吗 如果有这样的汽车系统: 汽车(类) ->主体(类) ->转向轮(类) ->查西(班级) ->车轮(类) 那么这些类不是从Car继承的,是吗?因为在理论上,我被教导继承有一种“可以”的关系。。“人可以是学生”。。。“汽车有一个贞操”,这就意味着它是关联 有什么想法吗?:) 外观模式是适配器模式的变体。适配器模式“包装”一个接口并将其转换为另一个接口(使其适应客户机所期望的形式)。通常用于使新界面适应旧的客户端软件。或者用一个崭新的、可能更干净

立面设计模式以“关联”为中心,而不是以继承为中心,对吗

如果有这样的汽车系统:

汽车(类)

->主体(类)

->转向轮(类)

->查西(班级)

->车轮(类)

那么这些类不是从Car继承的,是吗?因为在理论上,我被教导继承有一种“可以”的关系。。“人可以是学生”。。。“汽车有一个贞操”,这就意味着它是关联


有什么想法吗?:)

外观模式是适配器模式的变体。适配器模式“包装”一个接口并将其转换为另一个接口(使其适应客户机所期望的形式)。通常用于使新界面适应旧的客户端软件。或者用一个崭新的、可能更干净的界面来包装旧的、粗糙的、大的、不起眼的软件,以便在以后替换旧的、粗糙的代码

另一方面,Facade模式包装了一个接口,向客户机提供了一种简化的接口形式

两者都与组合与继承关系不大

你想看看埃里克·弗里曼和伊丽莎白·弗里曼写的书。就学习如何使用设计模式而言,比GO4的书IMHO要好得多


是的。这是正确的。门面以联想为中心。它包装了各种相关的子系统(它们主要一起工作),为客户机提供了一个有意义且简单的接口。子系统不必位于同一继承层次结构中,但几乎总是关联的

您的汽车示例:


我同意你的看法。facade模式的思想是,您有一堆关联的对象,可以将这些对象包装在facade中,以便更轻松地管理和操作这些对象

正如瓦利德·汗(Waleed Khan)在评论中所说,这个例子模糊了组成的界限,因为汽车是由不同的部件组成的。我们可能会遇到这样一种情况,组成立面的对象都在一起工作,而不直接成为某个更大实体的组成部分


汽车示例使事情变得简单,因为我们可以执行类似于
car.turnlight()
的操作,这可能会影响车轮和方向盘。对象之间的协调由
Car

处理,我不同意你的看法,facade既不以关联为中心,也不以继承为中心

facade是一个对象,它为更大的代码体提供了一个简化的接口

这意味着它用于提供子系统的更高级别视图并隐藏其复杂性,无论子系统的实现是基于什么、关联还是继承

facade的另一个替代方案是透明facade,它让客户端能够通过它,并访问子系统的各个操作


您所询问的汽车系统只是一个示例,模式并不限于此。

我同意下面的对象是关联的还是继承的是一个实现细节,与模式的功能没有多大关系

坦率地说,Facade是一种模式,它试图完成组件化所做的相同事情:您不能总是轻松地操作一系列不同的事情,但您需要一个接口。在Java世界中应用Facade最常见的例子是提供一种使用JavaMail接口的方法。你甚至不想处理会话。这很愚蠢。类似地,Spring的持久性类是一个门面,尽管它们允许您通过使用方面来忽略会话,而且它们还引入了简化的危险,因为会话在连续调用中实际上是不同的,因此


想知道Facade是否适用的关键问题是你能隐藏什么?你真的能做到吗?

我不确定“facada”是什么,但我觉得这就像是一个构图。@WaleedKhan抱歉-漫长的一天:)我的意思是Facade你可以检查这个关于Facade的问题,这样我就可以拥有一个名为“比较”的功能,这是用户看到的,也是人们知道的。在幕后,它实际上是通过关联来发现这两种价值观的相似之处。。这将是一个门面?它真的不是一个变体。它们都是结构模式,但它们非常不同。认为那本书比《四人帮》好的想法显然是荒谬的。Go4从理论的角度谈论模式很好。对于解释如何以实际的方式应用它们几乎没有用。你这么说。2000年,它被多布斯博士评为过去十年最重要的书。大多数人都认为这是最后两个问题中最重要的一个。我发现他们的解释很好,甚至不介意这些例子是C++的,有时是SimalTalk。这本书是有史以来写得最好的书之一,经文。另一方面,这本对大脑友好的指南就像是在读福克纳的卡通版。我有这本书,已经看了很多遍了。我不会向任何人推荐它。在大量代码中提到简化的界面,这是一个很好的选择。在android中,他们还使用Facade设计模式作为上下文实例,从而访问环境变量(应用程序状态、当前活动、安卓系统)