必知必会的设计原则——合成复用原则

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了必知必会的设计原则——合成复用原则相关的知识,希望对你有一定的参考价值。

概述

 在面向对象设计中,可以通过两种方法在不同的环境中复用已有的设计和实现,即通过组合/ 聚合关系或通过继承,但首先应该考虑使用组合/聚合,组合/聚合可以使系统更加灵活,降低 类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少;其次才考虑继承,在使用继承时,需要严格遵循里氏代换原则,有效使用继承会有助于对问题的理解,降低复杂 度,而滥用继承反而会增加系统构建和维护的难度以及系统的复杂度,因此需要慎重使用继 承复用。

合成复用原则又称为组合/聚合复用原则;尽量使用对象组合,而不是继承来达到复用。

“某种程度上 继承有问题”:破坏了系统的封装性,基类发生了改变,子类的实现也会发生改变;子类如果不需要基类中的方法,那么系统耦合性就开始变高;继承是静态的,不能在程序运行时发生改变;

继承案例代码

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()颜色车在行驶");
        
    

结论:像这个汽车行驶的需求,不管以后又有黑色的、蓝色的汽车,或者加水的汽车之类都做好了扩展,不用再使用继承去解决这个问题。

总结

关于合成复用原则在现实编码过程中,尤其对重构系统特别有用,所有的设计原则系列文章都已经更新完毕,有何疑问,欢迎交流。


  1. 必知必会的设计原则——单一职责原则

  2. 必知必会的设计原则——开放封闭原则

  3. 必知必会的设计原则——依赖倒置原则

  4. 必知必会的设计原则——里氏替换原则

  5. 必知必会的设计原则——接口隔离原则

  6. 必知必会的设计原则——迪米特原则

以上是关于必知必会的设计原则——合成复用原则的主要内容,如果未能解决你的问题,请参考以下文章

必知必会的设计原则——依赖倒置原则

必知必会的设计原则——单一职责原则

必知必会的设计原则——依赖倒置原则

必知必会的设计原则——开放封闭原则

必知必会的设计原则——开放封闭原则

必知必会的设计原则——迪米特原则