首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合与外观模式

组合与外观模式
EN

Stack Overflow用户
提问于 2018-07-02 02:12:37
回答 2查看 1.5K关注 0票数 3

我发现了一个响应,它让我理解了更多的类组合。

代码语言:javascript
复制
class Engine
{

}

class Automobile
{

}


class Car extends Automobile // car "is a" automobile //inheritance here
{ 
 Engine engine; // car "has a" engine //composition here

}

但这不是一个门面模式吗?facade不是要通过划分子类来使类更简单吗?那么组合和外观之间的区别是什么呢?

也许我搞错了。外观是一种设计模式,但组合更像是一种可遵循的良好实践。我们可以说使用facade就是在做组合吗?

EN

回答 2

Stack Overflow用户

发布于 2018-07-02 18:52:31

组合将具有相同API的对象中的N个其他对象组合在一起。因此,您可以在复合对象及其组件上调用相同的方法。

Facade似乎做了一些非常相似的事情,但我认为它解除了复合对象必须符合相同API的限制。外观的全部意义在于包装器和包装的API可以是不同的。

您展示的示例既不是正式的组合,也不是外观,但如果采用组合的最开放定义,那么它可能是这样的:“将其他对象作为其执行操作的成员的对象”。

票数 1
EN

Stack Overflow用户

发布于 2018-07-10 11:54:02

外观模式是一种设计模式,用于将不适合您当前需求的界面更改为更有帮助的界面。它完全封装了另一个接口,而不是公开它。

下面是一些用法示例:

  • File.Copy()不能很容易地在.NET中模拟,所以我写了一个facade,用一个虚方法委托它,所以我可以模拟那个facade。
  • 当使用第三方库时,你可能不想允许耦合到那个库中的类型,所以你编写了一个facade来封装那些类型,并且只公开你的副本
  • 一个你想使用的类可能有大量的方法,但你只需要几个。
  • 服务类可能有一些神秘的用法(“当你想启用抗锯齿时,传入-19438作为第二个参数”),你不需要在你的代码中拥有所有的选项。在这个类之上创建一个更易于使用的Facade,以提高核心代码的可读性。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51125814

复制
相关文章

相似问题

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