2013-05-17 132 views
1

我经常遇到一些设计问题,我可以选择通过继承子类来专门化一个类,或者通过为它定义属性来专门化类将其分类。例如,为了收集汽车零部件,我们可以定义类(例如轮子,轮胎,门等),或者我们可以定义一个具有称为“类型”属性的类“CarComponent”列举不同类型汽车组件的枚举值。面向对象的设计 - 专业化:继承与属性

我们如何比较这两种方法,以及哪种设计模式会推荐它们中的每一种?

谢谢。

+0

我认为方法的差异取决于您对这些不同分类所需的行为。 – vgoff

回答

1

继承是关于改变行为。如果你不改变行为,你不需要一个子类。继承不应该是为每个名词创建一个类,不管它看起来多么好看。

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

那么Wheel,Tyre和Door有什么不同的行为?

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

如果他们的行为不同,您是否可以用Composition完成同样的事情?你能将行为转化为战略吗?

“比继承更喜欢构图”不仅仅是一个口号,它是一个好主意。