单一职责
定义
一个类只负责一项职责
里氏替换
定义
引用基类的地方必须能透明地使用其子类的对象
核心思想
子类可以扩展父类的功能,但不能改变父类原有的功能
- 1 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法
- 2 子类中可以增加自己特有的方法
- 3 当子类的方法重载父类的方法时,方法的形参要比父类方法的输入参数更宽松
- 4 当子类的方法实现父类的抽象方法时,方法的返回值要比父类更严格
依赖倒置
- 定义
高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象 - 核心思想
面向接口编程 - 好处
降低类之间的耦合性,提高系统的稳定性,降低修改程序造成的危险 - 方法
1 底层模块尽量有抽象类或接口
2 变量的声明类型尽量是抽象类或接口
3 使用继承时遵循里氏替换原则
接口隔离
定义
客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应建立在最小的接口上
核心思想
建议单一接口,避免接口庞大臃肿,尽量细化接口,接口中的方法尽量少
通过分散定义多个接口,预防外来变更的扩散,提高系统的灵活性和可维护性
与单一职责比较
- 1 单一职责原则注重职责,接口隔离原则注重对接口依赖的隔离
- 2 单一职责主要是约束类,其次是接口和方法,针对程序中的实现和细节;接口隔离原则主要约束接口,针对抽象,针对程序整体框架的构建
注意
1 接口尽量小且适度
2 为依赖接口的类定制服务,只暴露给调用类需要的方法,隐藏不需要的方法
3 提高内聚,减少对外交互
迪米特法则
定义
一个对象应该对其他对象保持最小的了解
核心思想
尽量降低类与类之间的耦合,只与直接的朋友通信
开闭原则
定义
一类软件实体如类、模块和函数应该对扩展开放,对修改关闭
核心思想
当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化
用抽象构建框架,用实现扩展细节
tips
单一职责 : 类要职责单一
里氏替换 : 不要破坏继承体系
依赖倒置 : 面向接口编程
接口隔离 : 接口设计要精简单一
迪米特 : 降低耦合
开闭原则 : 对扩展开放,对修改关闭