在阅读 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; }
}
然后您继承它并创建您的 PUTruck
、SportsCar
、Sedan
等
突然之间,到了 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/