面向对象的设计 - 专业化:继承与属性

时间:2013-05-17 08:25:42

标签: oop inheritance object-oriented-analysis

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

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

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

那么轮胎,轮胎和门有什么不同的行为?

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

如果他们的表现不同,你能用Composition完成同样的事情吗?你能将行为转变为战略吗?

“首选组合而不是继承”不仅仅是一个口号,这是一个好主意。