设计模式的六大原则
- Single Responsibility Principle:单一职责原则
- Open Closed Principle:开闭原则
- Liskov Substitution Principle:里氏替换原则
- Law of Demeter:迪米特法则
- Interface Segregation Principle:接口隔离原则
- Dependence Inversion Principle:依赖倒置原则
单一职责原则
就一个类而言,应该仅有一个引起它变化的原因。应该只有一个职责。如果一个变化导致多处修改,则存在重复。
单一职责原则的核心就是控制类的粒度大小、将对象解耦、提高其内聚性。如果遵循单一职责原则将有以下优点。
- 降低类的复杂度。一个类只负责一项职责,其逻辑肯定要比负责多项职责简单得多。
- 提高类的可读性。复杂性降低,自然其可读性会提高。
- 提高系统的可维护性。可读性提高,那自然更容易维护了。
- 变更引起的风险降低。变更是必然的,如果单一职责原则遵守得好,当修改一个功能时,可以显著降低对其他功能的影响。
举例: 七大设计原则(一):单一职责原则 - 代码天地https://www.codetd.com/article/11600110
开闭原则
对扩展开放,对修改关闭
开闭原则是面向对象程序设计的终极目标,它使软件实体拥有一定的适应性和灵活性的同时具备稳定性和延续性。具体来说,其作用如下。
- 对软件测试的影响,软件测试时只需要对扩展的代码进行测试,不影响原有代码。
- 提高代码的可复用性,粒度越小,被复用的可能性就越大;在面向对象的程序设计中,根据原子和抽象编程可以提高代码的可复用性。
- 提高软件的可维护性,遵守开闭原则的软件,其稳定性高和延续性强,从而易于扩展和维护。
里氏替换原则
派生类(子类)对象可以在程式中代替其基类(超类)对象,其针对的问题:有一个功能P1,由类A完成。现需要将功能P1进行扩展,扩展后的功能为P,其中P由原有功能P1与新功能P2组成。新功能P由类A的子类B来完成,则子类B在完成新功能P2的同时,有可能会导致原有功能P1发生故障。
里式替换即子类可以扩展父类的功能,但是不能改变父类原有的功能。也就是说,在子类继承父类的时候,除了添加新的方法完成新增功能之外,尽量不要重写父类的方法。其具体描述如下:
- 子类必须实现父类的抽象方法,但不得重写(覆盖)父类的非抽象(已实现)方法。
- 子类中可以增加自己特有的方法。
- 当子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
- 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
举例:
迪米特法则
即最少知识原则,一个对象应当对其他对象尽可能少的了解。不和陌生人说话
其主要用于降低类之间的耦合
例子:
接口隔离原则
客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。
举例:
设计模式六大原则(4):接口隔离原则_三级小野怪的专栏-CSDN博客_接口隔离原则
依赖倒置原则
程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
举例:
说明: 该篇只是学习用,文章中的链接都是在学习过程中觉得能快速理解的各个例子~~