1
我经常遇到一些设计问题,我可以选择通过继承子类来专门化一个类,或者通过为它定义属性来专门化类将其分类。例如,为了收集汽车零部件,我们可以定义类(例如轮子,轮胎,门等),或者我们可以定义一个具有称为“类型”属性的类“CarComponent”列举不同类型汽车组件的枚举值。面向对象的设计 - 专业化:继承与属性
我们如何比较这两种方法,以及哪种设计模式会推荐它们中的每一种?
谢谢。
我经常遇到一些设计问题,我可以选择通过继承子类来专门化一个类,或者通过为它定义属性来专门化类将其分类。例如,为了收集汽车零部件,我们可以定义类(例如轮子,轮胎,门等),或者我们可以定义一个具有称为“类型”属性的类“CarComponent”列举不同类型汽车组件的枚举值。面向对象的设计 - 专业化:继承与属性
我们如何比较这两种方法,以及哪种设计模式会推荐它们中的每一种?
谢谢。
继承是关于改变行为。如果你不改变行为,你不需要一个子类。继承不应该是为每个名词创建一个类,不管它看起来多么好看。
CarComponent在问题的上下文中有什么行为?
那么Wheel,Tyre和Door有什么不同的行为?
如果它们的行为不同,它们可能是CarComponent的子类(但不一定,见下文)。如果他们行为不同,他们只是一种类型。
如果他们的行为不同,您是否可以用Composition完成同样的事情?你能将行为转化为战略吗?
“比继承更喜欢构图”不仅仅是一个口号,它是一个好主意。
我认为方法的差异取决于您对这些不同分类所需的行为。 – vgoff