概述
继承案例代码
public class A
{
public void Methond1()
{
Console.WriteLine("我是方法1");
}
public void Methond2()
{
Console.WriteLine("我是方法2");
}
public void B_Methond3()
{
Console.WriteLine("我是方法3");
}
}
public class B : A
{
public void MethondB()
{
}
}
public class C : B
{
public void MethondC()
{
}
}
public class D : C
{
public void MethondD()
{
}
}
结论:问题是有些方法B类并不需要,然而在A类中实现后,B类都需要继承,这就是问题,导致职责不清晰,越来越臃肿!以后新增需求,像C又继承B...
关于汽车案例的需求改用合成复用原则实现
public interface IColor
{
public string ShowCar();
}
public class Green : IColor
{
public string ShowCar()
{
return "绿色";
}
}
public class Red : IColor
{
public string ShowCar()
{
return "红色";
}
}
//)——————————————————————————————————————————————————
public abstract class Car
{
public abstract void Run(IColor color);
}
public class QyCar : Car
{
public override void Run(IColor color)
{
Console.WriteLine($"汽油式的{color.ShowCar()}颜色车在行驶");
}
}
public class DdCar : Car
{
public override void Run(IColor color)
{
Console.WriteLine($"电动式的{color.ShowCar()}颜色车在行驶");
}
}
结论:像这个汽车行驶的需求,不管以后又有黑色的、蓝色的汽车,或者加水的汽车之类都做好了扩展,不用再使用继承去解决这个问题。
总结
关于合成复用原则在现实编码过程中,尤其对重构系统特别有用,所有的设计原则系列文章都已经更新完毕,有何疑问,欢迎交流。