一、开闭原则
定义一个软件实体,像类、模块、函数等应该考虑对扩展开放,对修改关闭(扩展新的类而不改变原有类的功能)。用抽象构建架构,用实现扩展细节。
优点:提高软件系统的可维护性和可复用性。
二、依赖倒置原则
高层模块不应该依赖低层模块,二者应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象;
一般说的高层模块指的应用端,关键是要面向接口编程,不针对实现编程。
优点:可以减少类与类之间的耦合性,提高系统的稳定性,代码可读性,可维护性,降低程序修改带来的风险。
三、单一职责原则
一个类或者一个方法,不要存在一个导致类或者方法进行变更的原因。做到一个类,接口、方法只负责一项职责。
后面需求变更可以降低代码之间的耦合度,提高代码的可读性,维护性,降低程序修改带来的风险。
四、接口隔离原则
用多个专门的接口,而不是使用单一的总接口,客户端不应该依赖他不需要的接口。一个类对应一个类的依赖应该建立在最小的接口上,建立单一接口,而不是一个臃肿的接口,遵循适度原则,尽量细化接口,实现高内聚,低耦合思想。
五、迪米特法则
是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则,尽量降低类与类之间的耦合。迪米特原则主要强调和朋友交流,不和陌生人交流。出现在成员变量方法的输入、输出参数中的类都可以称为成员朋友类而出现在方法内部的类不属于朋友类。
六、里氏替换原则
一个软件实体如果适用一个父类的话,那么一定适用于其子类,所有引用父类的地方必须能透明的使用其子类的对象,子类对象能够替换父类对象,而程序逻辑不变。
里式替换原则是继承复用的基石,当子类可以替换父类,并且软件功能不受影响时,父类才能真正的被复用,子类也可以增加自己新的功能,里式替换原则是对开闭原则的一个补充。
七、合成(组合)/聚合复用法则
尽量使用对象组合/聚合,而不是继承关系达到软件复用的目的。
聚合 has-A 组合contains-A 继承 is-A 父子关系
总结:学习软件设计原则,千万不能形成强迫症,根据具体业务的要求,随机应变。