设计模式六大原则
古人云:温故而知新,对于前人的经验总结经常拿出来看看,对我们的工作生活都是非常有益的。今天回头温故一下设计模式六大原则,让我们时刻铭记这六大原则,并能够在日常的开发中运用,以帮助我们设计开发出高稳定、高可扩展性和维护性的系统。
设计模式六大原则时常能在各种讲GOF 23种设计模式的书籍中见到,虽然命名和称呼不同,但是核心思想都一致的。
设计模式六大原则如下:
- 单一职责原则 (Single Responsibility Principle)
- 里氏替换原则 (Liskov Substitution Principle)
- 依赖倒置原则 (Dependence Inversion Principle)
- 接口隔离原则 (Interface Segregation Principle)
- 迪米特法则 (Law Of Demeter)
- 开放关闭原则 (Open Close Principle)
拓展原则
- 组合/聚合复用原则(Composite/Aggregate Reuse Principle CARP)
1.单一职责原则
核心思想:一个类只负责一个职责。假如一个类同时负责P1和P2两个职责,那么很有可能因为P1职责发生变化而导致P2的职责发生故障。
通俗点说,我们日常开发新需求或者修改Bug的时候,时常会遇到修改一个地方,引起多个地方都发生故障了。这个时候我们就要注意了,看看我们修改的类是不是职责过多,并及时优化。
2.里氏替换原则
核心思想:在使用基类的地方可以使用任意子类进行替换,并能保证子类完美替换基类。
通俗的讲,将代码中的基类出现的地方,使用子类替换后,程序应该能正确运行。
3.依赖倒置原则
核心思想:抽象不应该依赖细节;细节应该依赖抽象;高层模块不应该依赖底层模块,二者都应该依赖抽象。
通俗来讲,调用端(高层模块)和实现类(底层模块)不应该依赖具体的类,应该依赖接口。
4.接口隔离原则
核心思想:类之间的依赖关系应该建立在最新的接口上
通俗来说,提供尽可能小的接口,而不是提供大的总接口。也就是要为不同的类、不同的实现建立不同的接口,不要试图去建立一个庞大全面的总接口。
5.迪米特法则
核心思想:也被成为最少知道原则(Least Knowledge Principle),一个类对自己依赖的类知道的越少越好,类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。
使用迪米特法则,尽量降低类与类之间的耦合,减少类与类之间的依赖关系,可以做到低耦合,高内聚。
6.开放关闭原则
核心思想:对修改关闭,对扩展开放。有新的需求或变化时, 最好是在现有代码的基础上进行扩展,以适应新的情况;如果是对原有代码进行修改,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试
拓展原则:
1.组合/聚合复用原则(Composite/Aggregate Reuse Principle CARP)
核心思想:能够使用合成/聚合的,不要使用继承。合成是指局部与整体的关系;聚合则是包含的关系。优先考虑组合方式,再考虑继承方式,继承又考虑到里氏替换原则。可以根据IS-A和Has-A的概念来判断什么时候用组合方式,什么时候用继承方式。符合IS-A应该使用继承;符合Has-A应该使用组合方式。
一句话总结:
单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合;组合/聚合复用原则告诉我们如何正确选择集成或组合。而开闭原则是总纲,他告诉我们要对扩展开放,对修改关闭。