1.开闭原则(Open Close Principle)
    -对扩展开放,对更改关闭
    -保证以前代码的准确性,使开发者更专注于新扩展的代码上

    2.单一职责原则(Single Responsibility Principle)
    -一个类只负责一个功能领域的职责
    -降低类的复杂度,当修改一个功能时,降低对其他功能的影响,提供类的可读性

    3.里氏替换原则(Liskov Substitution Principle)
    -任何基类出现的地方,子类一定可以出现
    -在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象,开闭原则实现的手段之一

    4.依赖倒转原则(Dependence Inversion Principle)
    -针对接口编程,抽象不依赖于细节,细节应依赖于抽象
    -多数情况下,开闭原则,里氏替换原则,依赖倒转原则会同时出现,开闭原则是目标,里氏替换原则是基础,依赖倒转是手段。
    实现方式:

    1. 接口传递
    2. 构造方法传递
    3. setter方法传递

    5.接口隔离原则(Interface Segregation Principle)
    -使用多个专门的接口,不使用单一的总接口
    -当一个接口太大时,我们需要把他拆分成更小的接口,但不能违反单一职责原则,每个接口应该承担一种相对独立的角色,不该干的事情不干,该干的事情都要干。

    6.迪米特法则(Law Of Demeter)
    -一个实体应当尽量少的与其他实体发生相互作用
    -应该尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用,如果其中的一个对象需要调用另一个对象的 某一个方法的话,可以通过第三者转发这个调用。

    7.合成复用原则(Composite Reuse Principle)
    -尽量使用组合而非继承
    -就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过这些对象的委派达到复用已有功能的目的