设计原则
转自:https://www.cnblogs.com/pony1223/p/7594803.html
1. 单一职责
定义
一个类只负责一项职责优点
- 降低类的复杂度,逻辑简单
- 提高类的可读性,提高系统的可维护性
- 降低变更风险,影响点较少
2. 里氏替换原则
定义
任何基类出现的地方,子类一定可以出现。子类可以扩展父类的功能,但不能改变父类原有的功能继承的优点
- 子类拥有父类的所有属性和方法,减少创建类的工作量
- 提高代码重用性
- 提高代码可扩展性,子类不但拥有父类的功能,也可以有自己的功能
继承的缺点
- 继承是侵入性的。只要继承,就必须拥有父类的所有属性和方法。
- 降低了代码的灵活性。因为继承时,父类会对子类有一种约束。
- 增强了耦合性。当需要对父类的代码进行修改时,必须考虑到对子类产生的影响。有时修改了一点点代码都有可能需要对打断程序进行重构。
规则
- 子类可以实现父类的抽象方法,但是不能覆盖非抽象方法
- 子类可以增加自己的方法
- 子类覆盖或者重载父类的方法时,方法入参要比父类更宽松(父类:ArrayList,子类:List)
- 当子类实现父类的方法时,方法返回值要比父类更具体
3. 依赖倒置原则
定义
要依赖于抽象,不要依赖于具体实现。高层模块不应该依赖于低层模块,二者应该依赖其抽象;抽象不应该依赖于细节,细节应该依赖于抽象。面向接口编程。优点
- 面向接口编程,降低类之间的耦合性,提高系统稳定性,减少修改程序造成的风险
规则
- 低层模块尽量都要有抽象类或接口,或者两者都有(可能会被人用到的)
- 变量的声明类型尽量是抽象类或接口
- 使用继承时遵循里氏替换原则
4. 接口隔离原则
定义
客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。将臃肿的接口拆分成几个接口,类按需建立依赖关系
优点
- 降低类之间的耦合度,提供程序灵活性
规则
- 接口尽量小,但是要有额度。过少程序不灵活,过多设计复杂化。
- 为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来
- 提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情
5. 迪米特原则(最少知道原则)
定义
一个对象应该对依赖的对象保持最少的了解,对于被依赖的类,无论多么复杂,都尽量地将逻辑封装在类的内部,对外提供public方法,不对外泄漏任何信息优点
- 降低耦合关系
规则
- 尽量降低类之间的耦合关系
6. 开闭原则
定义
对扩展开放,对修改关闭
7. 总结
用抽象建立框架,用实现扩展细节
单一职责原则
实现类要职责单一里氏替换原则
不要破坏继承体系依赖倒置原则
要面向接口编程接口隔离原则
在设计接口的时候要精简单一迪米特原则
降低耦合。开闭原则
总纲,对扩展开放,对修改关闭