开闭原则
定义:一个软件实体如类,模块和函数应该对扩展开放,对修改关闭
用抽象构建框架,用实现扩展细节
优点:提高软件系统可复用性和可维护性
依赖倒置原则
定义:高层模块不应该依赖底层模块,二者都应该依赖其抽象
抽象不应该依赖细节,细节应该依赖抽象
针对接口编程,不要针对实现编程
优点:可以减少类间的耦合性,提高系统稳定性,提高代码可读性和可维护性,可降低修改程序的风险
单一职责原则
定义:不要存在多于一个导致类变更的原因
一个类/接口/方法只负责一项职责
优点:降低类的复杂度,提高类的可读性,提高系统可维护性,降低变更引起的风险
接口隔离原则
定义:用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口
一个类对一个类的依赖应该建立在最小的接口上
建立单一接口,不要建立庞大臃肿的接口
尽量细化接口,接口中的方法尽量少
注意适度原则,一定要适度
符合高内聚低耦合的设计思想,使得类具有很好的可读性,可维护性和可扩展性
迪米特原则
定义:一个对象应该对其他对象保持最少的了解。又叫最少知道原则
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,如果一个类需要调用另一个类的方法,可以通过第三方转发这个调用
尽量降低类与类之间的耦合
优点:降低类之间的耦合
强调只和“朋友”交流,不和陌生人说话(出现在成员变量,方法的输入,输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类)
里氏替换原则
定义:子类型必须能够替换掉它的父类型
一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且他察觉不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有发生变化
提高父类的可复用性和扩展性
合成复用原则
在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;
新的对象通过向这些对象的委派达到复用已有功能的目的
要尽量使用合成/聚合,尽量不要使用继承。