组合模式 vs 外观模式

3
我找到了一个回答,让我更好地理解了类组合。
class Engine
{

}

class Automobile
{

}


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

}

但这不是门面模式吗?门面不是通过将类分成子类使其更简单的方法吗?那么组合和门面有什么区别呢?
或者我弄错了,门面是一种设计模式,但组合更像是一种应该遵循的好习惯。我们可以说使用门面是在进行组合吗?
2个回答

1

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

外观似乎做了非常类似的事情,但我认为它解除了复合对象必须符合相同API的限制。整个外观的重点在于包装和包裹的API可以不同。

您展示的示例既不是正式的组合也不是外观,但如果您采用最开放的组合定义,则可能是其中之一:“具有其他对象作为成员并对其执行操作的对象。”


我同意你的意见。 - AndroidLover

0

外观模式是一种设计模式,用于将不适合当前需求的接口转换为更有帮助的接口。它完全封装了其他接口,不会暴露出来。

以下是一些使用示例:

  • 在.NET中,File.Copy()很难进行模拟,因此我编写了一个外观,通过虚拟方法委托给它,这样我就可以模拟该外观。
  • 当使用第三方库时,您可能不想允许与该库中的类型耦合,因此编写一个外观来封装这些类型,并仅公开您的副本。
  • 您想要使用的类可能有大量方法,但您只需要其中的几个。可以编写一个外观来提供更简单的接口。
  • 服务类可能具有晦涩的用法(“当您想启用抗锯齿时,请将-19438作为第二个参数传入”),而您不需要在代码中拥有所有选项。创建一个易于使用的外观,以增加核心代码的可读性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接