1

我通常会遇到一些设计问题,在这些问题中我可以选择通过由子类继承来专门化一个类,或者通过为它定义一个对其进行分类的属性来专门化该类。例如,对于汽车的组件集合,我们可以定义类(例如 Wheel、Tire、Door ... 等),或者我们可以定义一个单独的类“CarComponent”,它有一个名为“Type”的属性枚举中列出不同类型的汽车组件的值。

我们如何比较这两种方法,以及它们各自推荐的设计模式是什么?

谢谢。

4

1 回答 1

1

继承是关于改变行为。如果您不改变行为,则不需要子类。继承永远不应该是为每个名词创建一个类,无论它看起来多么漂亮。

CarComponent 在问题的上下文中有什么行为?

那么 Wheel、Tire 和 Door 有哪些不同的行为呢?

如果它们的行为不同,它们可能是 CarComponent 的子类(但不一定,见下文)。如果他们的行为没有不同,他们只是一种类型。

如果它们的行为不同,你能用 Composition 完成同样的事情吗?你能把这些行为变成一个策略吗?

“优先组合而不是继承”不仅仅是一个口号,它是一个好主意。

于 2013-05-17T20:31:06.477 回答