设计模式是为了让程序具有更好的 代码重用性、可读性、可扩展性、可靠性、使程序呈现高内聚、低耦合的特性
1.单一职责原则
对类来说,一个类应该只负责一项职责(功能),这样可以降低类的复杂度,提高类的可读性可维护性。
2.接口隔离原则
客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。
如果这个接口中的方法很多,往往实现这个接口的类又不需要用到那么多方法,可以考虑把这个接口拆分称几个独立的接口,避免实现用不到的方法所造成的浪费
3.依赖倒转原则
依赖倒转原则的中心思想是 面向接口的编程。
高层模块不应该依赖低层模块,二者都应该依赖其抽象。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。
- 低层模块尽量都要有抽象类或者接口,或者两者都有,程序稳定性更好。
- 变量的声明类型尽量是抽象类或接口,这样我们的变量引用和实际对象间,就存在一个缓冲层,利于程序扩展和优化 (利用了多态)
- 继承时遵循里氏替换原则。
4.里氏替换原则
在使用继承时,子类尽量不要重写父类的方法。
继承实际上让两个类的耦合性增强了,在适当的情况下,可以通过聚合、组合、依赖来解决问题。
5.开闭原则(OCP)
一个软件实体如类、模块和函数应该对扩展开放、对修改关闭。用抽象构建框架,用实现扩展细节。
当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现。
6.迪米特法则
迪米特法则时要降低类之间的耦合。简单来说就是只与直接朋友通信。
直接朋友: 每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系,耦合的方式很多,依赖、关联、组合、聚合等。其中我们称出现成员变量、方法参数、方法返回值的类为直接朋友,而出现在局部变量中的类不是直接朋友,也就是说,陌生的类最好不要以局部变量的形式出现在类的内部。
7.合成复用原则
尽量使用合成/聚合的方式,而不是使用继承。
下面这张图是来自尚硅谷视频的图片,解释了依赖、聚合、组合之间的关系。