【问题标题】:Object-Oriented Design - Specialization: Inheritance vs. Attributes面向对象设计 - 专业化:继承与属性
【发布时间】:2013-05-17 08:25:41
【问题描述】:

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

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

谢谢。

【问题讨论】:

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

标签: oop inheritance object-oriented-analysis


【解决方案1】:

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

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

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

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

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

“优先组合胜过继承”不仅仅是一句口号,还是个好主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-05
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    相关资源
    最近更新 更多