一、SingleResponsibility Principle,单一职责原则:一个类应该只负责一项职责
    ~类方法数量足够少时可在方法级别保持单一职责

    二、Open Closed Principle,开闭原则:模块和函数对扩展方开放,对使用方关闭;扩展后不用改使用方的代码
    ~尽量通过扩展而不是修改来实现变化

    三、Liskov Substitution Principle,里氏替换:所有引用基类的地方必须能透明地使用其子类的对象
    ~无差异调用基类、子类方法,即子类尽量别重写父类方法;实现途径如下:
    子类提升到和父类同级,共同继承/实现更高一级的抽象
    image.png

    四、Interface Segregation Principle,接口隔离原则:一个类对另一个类的依赖应该建立在最小接口上
    ~一个类通过接口只用到另一个类的一部分方法,用不到接口的所有方法,应该拆分接口
    image.png

    五、Dependence Inversion Principle,依赖倒转(置)原则:高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象
    ~一个类作为一个方法的参数,把这个类参数换成它的接口或父类
    image.png

    六、Demeter Principle,迪米特法则:一个对象对其它对象保持最少的了解
    ~只与直接朋友通信,直接朋友:类以成员变量、方法参数、方法返回值方式出现在另一个类中

    七、Composite Reuse Principle,合成复用原则:尽量使用合成/聚合的方式,而不是使用继承
    ~以下三种方案均可:
    image.png