面向对象的五个设计原则:SOLID

1.    SOLID

(1)SRP(The Single Responsibility Principle)单一责任原则

(2)OCP(The Open-Closed Principle)开放-封闭原则

(3)LSP(The Liskov Substitution Principle)Liskov替换原则

(4)ISP (The Interface Segregation Principle)接口聚合原则

(5)DIP(The Dependency Inversion Principle)依赖转置原则

2.    详细介绍:

(1)SRP(The Single Responsibility Principle)单一责任原则

    Responsibility:a reason for change

    SRP:

        -不应有多于一个的原因使得一个类发生变化

        -一个类,一个责任   

    如果一个类包含了多个责任,那么将引起不良后果

        -引入额外的包,占据资源

        -导致频繁的重新配置和部署

    这是最简单的原则,却是最难做好的原则

    违反SRP的案例:

    

    

(2)OCP(The Open-Closed Principle)开放-封闭原则

    开放和封闭,指的是:

    a.    对扩展性的开放:

           模块的行为应是可扩展的,从而该模块可表现出新的行为以满足需求的变化

    b.    对修改的封闭:

           模块自身的代码是不应被修改的,扩展模块的一般途径是修改内部实现。

    关键的解决方案:抽象技术,使用继承(inheritance)和组成(composition)

    案例:

    

(3)LSP(The Liskov Substitution Principle)Liskov替换原则

    LSP:子类型必须能够替换其基类型

    派生类必须能通过其基类的接口使用,客户端无需了解二者之间的差异

    详见之前写的LSP博客。


(4)ISP (The Interface Segregation Principle)接口聚合原则

    客户端不应依赖于它们不需要的方法。

    “fat”的接口有很多缺点,不够聚合。

    “fat”接口可分解为多个小的接口,不同的接口向不同的客户端提供服务,客户端只访问

        自己所需要的端口。

        例如:


    又一实例:

    

(5)DIP(The Dependency Inversion Principle)依赖转置原则

    -抽象的模块不应该依赖于具体的模块

    -具体应该依赖于抽象

     简单来说,解决耦合。一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。即使实现细节不断变动,只要抽象不变,客户程序就不需要变化。这大大降低了客户程序与实现细节的耦合度。

    抽象出共同点,然后让实现细节依赖于抽象,客户端也使用抽象:

    

    相当于增加了一个桥梁-接口。

    


另外:GRASP:General Responsibility Assignment Software Patterns (principles), 

    是关于如何为“类”和“对象”指派“职责”的一系列原则。








猜你喜欢

转载自blog.csdn.net/qq_38969070/article/details/80733239