设计模式的七大原则
设计模式的最终目的是使程序:“高内聚、低耦合,可维护、可扩展,有良好复用性、灵活性”。
单一职责原则
单一职责原则(Single Responsibility Principle, SRP),一个类/方法/模块只负责一个职责。降低复杂度,提高可读性、可维护性,降低更改引起的风险。
开放-封闭原则
开放-封闭原则(Open-Closed Principle,OCP),软件实体(类/方法/模块等)应该对扩展开放,对修改封闭。简单来说,增加新功能应该在已有代码的基础上进行扩展,而不是修改已有代码。
里氏代换原则
里氏替换原则(Liskvo Substitution Principle,LSP),子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑性为不变及正确性不被破坏。
依赖倒置原则
依赖倒转原则(Dependency Inversion Principle,DIP),程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。核心就是面向接口编程。
- 高层模块不应该依赖低层模块,高层模块和低层模块都应该依赖于抽象。
- 抽象不应该依赖于具体,具体应该依赖于抽象。
接口隔离原则
接口隔离原则(Interface Segregation Principle,ISP),客户不应该依赖它不需要的接口,类间的依赖关系应该建立在最小的接口上。简单来说就是接口内容细分,避免一个接口包括过多的方法,迫使子类去实现所有方法,却没完全得到使用。
合成/聚合复用原则
合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP),一般也叫合成复用原则(Composite Reuse Principle, CRP),尽量使用合成/聚合,而不是通过继承达到复用的目的。
迪米特法则
迪米特法则(Law of Demeter,LoD),有时候也叫做最少知识原则(Least Knowledge Principle,LKP),一个软件实体应当尽可能少地与其他实体发生相互作用。
- 一个对象应该对其他对象保持最少的了解。
- 类与类之间关系越密切,耦合度越大。
- 只与直接的朋友通讯,一个对象的"朋友"包括他本身(this)、它持有的成员对象、入参对象、它所创建的对象。
参考:
- 《大话设计模式》 程杰