单一职责原则
简称: SRP
定义: 应该有且仅有一个原因引起类的变更.
好处:
1. 类的复杂性降低
2. 可读性提高
3. 可维护性提高
4. 变更引起的风险降低
里氏替换原则
简称: LSP
定义:
1. 如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有
的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型.
2. 所有引用父类的地方必须能透明地使用其子类的对象.
含义:
1. 子类必须完全实现父类的方法
2. 子类可以有自己的个性
3. 覆盖或实现父类的方法时输入参数可以被放大
4. 覆盖或实现父类的方法时输出结果可以被缩小
依赖倒置原则
简称: DIP
定义:
1. 高层模块不应该依赖低层模块,两者都应该依赖其抽象
2. 抽象不应该依赖细节
3. 细节应该依赖抽象
好处:
1. 减少类间的耦合性
2. 提高系统的稳定性
3. 降低并行开发引起的风险
4. 提高代码的可读性和可维护性
实现:
1. 每个类尽量都有接口或抽象类或抽象类和接口两者都具备
2. 变量的表面类型尽量是接口或抽象类
3. 任何类都不应该从具体类派生
4. 尽量不要覆写父类的方法
5. 结合里氏替换原则使用
接口隔离原则
简称: ISP
定义:
1. 客户端不应该依赖它不需要的接口
2. 类间的依赖关系应该建立在最小的接口上
含义:
1. 接口要尽量小
2. 接口要高内聚
3. 定制服务
4. 接口设计是的限度的
实现:
1. 一个接口只服务于一个子模块或业务逻辑
2. 通过业务逻辑压缩接口中的public方法
3. 已经被污染的接口,尽量支修改,若变更的风险较大,则采用适配器模式进行转化管理
4. 环境不同,接口的拆分的标准就不同
迪米特法则
简称: LoD
又称: 最少知识原则(LKP)
定义:
如果两个类不必直接通信,那么这两个类就不应当发生直接的相互作用.如果其中的
一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用.
直接通信条件:
1. 当前对象本身
2. 心参量形式传入到当前对象中的对象
3. 当前对象的实例变量直接引用对象
4. 当前对象的实例变量如果是琴聚集,那么聚集中的元素也都是
5. 当前对象所创建的对象
实现:
1. 优先考虑将一个类设置成不变类
2. 尽量降低一个类的访问权限
3. 谨慎使用Serializable
4. 尽量降低成员的访问权限
开闭原则
简称: OCP
定义:
软件实体应当对扩展开放,对修改关闭.开闭原则中"开",是指对于组件功能的扩展是开放的,
是允许对其进行功能扩展的;开闭原则国"闭",是指对原有代码的修改是封闭的,即修改原有的代码
对外部的使用是透明的.