面向对象的设计原则
- Liskov替换原则LSP
- 子类或者实现类一定是可以替换基类的,即子类或者实现类不能添加任何父类没有的附加约束
- 解决方案:父子关系解除,根据二者共性行为,继承抽象类或者接口
- 开放封闭原则OCP
- 对扩展开放,对更改封闭
- 解决方案:基本同上,引入抽象类或接口,新需求可以继承自抽象类,而非更改原来的具体类
- 单一职责原则SRP
- 一个类有且仅有一个引起它变化的原因
- 体现内聚性:一个模块的组成元素之间的功能相关性
- 一个类的职责发生变化的原因一般是需求发生变化,如果一个类职责过多,则会牵一发而动全身
- 解决方案:拆类
- 接口隔离原则
- 接口的SRP:接口不应该拥有过多协议,以避免接口污染
- 解决方案:使用 适配器模式 分离接口,采用多重继承
- 依赖倒置原则
- 高层模块不依赖于低层模块
- 所谓高层,指的是由低层类定义其行为的类
- 抽象不依赖于细节
- 面向接口编程
- 解决方案
- 找到真正的抽象(系统的本质特征)用通信图
- 工厂模式
- 设计原则
- 成员变量不应持有其他类的引用
- 工厂模式解决
- 不继承于具体类
- 不覆盖基类已实现的方法
- 迪米特原则
- 类与类之间应该尽可能不知道其他类,即应该尽可能解耦和
面向对象的设计模式
- GoF设计模式
- 应用设计模式