oop - 并行继承定义的具体例子

标签 oop design-patterns

在阅读 Alexander Shvets 的深入设计模式时,我在“优先考虑组合而不是继承”部分中偶然发现了以下陈述:

Trying to reuse code through inheritance can lead to creating parallel inheritance hierarchies

根据this根据并行继承的定义,子类化一个类需要在其他地方创建另一个子类。我有兴趣知道这种情况会是什么,我们必须在所有地方进行子类化,以及更进一步的原因:为什么我们必须在其他地方创建子类?这种需求是由上下文和我们试图解决的问题产生的,还是由(至少)两个类层次结构和它们之间的组合的结构引起的?而here试图给出并行继承的数学定义,但我不清楚其含义的必要性。

最佳答案

我是这样理解的。想象一下你有

public abstract class CarBase
{
    // all cars run on liquid fuel, right? This is 1955
    public decimal FuelVolume { get; set; }
}

然后您继承它并创建您的 PUTruckSportsCarSedan

突然之间,到了 2022 年,你有了电动汽车。你可能会这样做

public abstract class ElectricCarBase : CarBase
{
    public decimal ChargeVolume { get; set; }
}

^^ 这将带来所有未使用和不需要的属性的肮脏,一堆噪音,例如防冻剂和燃油管线。你最终会得到并行继承。您将需要创建各种适配器来支持这一切..

输入“组合优于继承”

public abstract class CarBase
{
    public List<IFuelProvider> FuelSources { get; set; }
}

public interface IFuelProvider 
{
    
    public FuelType TypeOfFuel { get; set; }

    public string MeasureUnit { get; set; }

    public int FuelUnits { get; set; }
}

现在,您可以支持燃气、电力或混合动力

这是我的理解。欢迎不同意见

关于oop - 并行继承定义的具体例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69498141/

相关文章:

actionscript-3 - AS3 - 我可以知道一个类是否实现了一个接口(interface)(或者是另一个类的子类)吗?

java - 干燥这些类的最佳方法是什么,除了构造函数之外的所有内容都重复

java - 纸牌游戏类的 OOP 设计

iphone - iOS设计: Using the delegate pattern in a library

c# - 给定泛型类型参数的类型,动态选择组件的类型

python - 寻找组织大型 kivy 项目的好方法

c# - 如何正确命名域 namespace 内的类?

c++ - this 指针作为 const 指针

c++ - 工厂模式中的传值

android - 3x3 数字矩阵的可能模式