"SOLID"五大原则

125 阅读2分钟

开闭原则

说到面向对象设计,大部分人脑海中闪过的恐怕都是“23种设计模式”。设计模式代表的是业务场景中总结出的最佳实现方式,属于实践的范畴,在其之上是更为重要的“SOLID”五大原则:

  • Single Responsibility Principle 单一责任原则
  • The Open Closed Principle 开放封闭原则
  • The Liskov Substitution Principle 里氏替换原则
  • The Dependency Inversion Principle 依赖倒置原则
  • The Interface Segregation Principle 接口分离原则

SOLID 五大原则的出发点也是软件工程的终极目标:“高内聚、低耦合”。在后端开发中运用最多的是“依赖倒置原则”,与其相关的设计模式大约有5-6个。如下图所示:

上图也可以理解为从抽象概念到具体实践的逐步演进。

在前端技术框架中,运用最多的是“开放封闭原则”,我们先来看一下这条原则是怎么定义的:

A software artifact should be open for extension but closed for modification.

翻译过来就是:软件系统应当对扩展开放,对修改封闭(感觉像没说)。这里举一个简单的例子来说明开闭原则,先帮助大家理解概念:

public  abstract  class  Shape
{    
    public  abstract double  Area();
}
public  class  Rectangle:  Shape
{    
    public  double Width 
    { 
        get; 
        set;
    }    
    public  double Height 
    { 
        get; 
        set;
    }    
    public  override double  Area()    
    {         
        return  Width * Height   
    }
}
public  class  Circle:  Shape
{    
    public  double Radius 
    { 
        get; 
        set
    }    
    public  override double  Area()    
    {        
        return  Radius * Radius * PI;    
    }
}
public  double  Area(Shape []  shapes)
{   
    doubel area  =  0;   
    foreach (var  shape  in  shapes)    
    {       
        area  +=  shape.Area();    
    }    
    return  area;
}

上例中无论场景如何扩展,Area 函数都无需修改,每个 Shape 类通过继承接口和多态特性,各自实现面积计算。

总结一下开闭原则就是:软件系统的核心逻辑都不应该轻易改变,否则会破坏系统的稳定性和增加测试成本。我们应当建立合适的抽象并统一接口,当业务需要扩展时,我们可以通过增加实体类来完成。