重构的目标
静态->动态
早绑定->晚绑定
继承->组合
编译时依赖->运行时依赖
紧耦合->松耦合
对象是什么
- 从语言实现层面来看,对象封装类代码和数据
- 从规格层面看,对象是以系列可被使用的公共接口
- 从概念层面讲,对象是某种拥有责任的抽象
面向对象原则
依赖倒置原则
- 高层模块(稳定)不应该依赖于底层模块(变化),二者都应该依赖于抽象(稳定)
- 抽象(稳定)不应该依赖于实现细节(变化),实现细节应该依赖于抽象
开闭原则
对扩展开放,对更改封闭
单一职责原则
一个类应该仅有一个引起他变化的原因,变化的方向隐含着类的责任
Liskov替换原则
子类必须可以替换它们的基类,继承表达类型抽象
接口隔离原则
不应该强迫客户程序依赖他们不用的方法,接口应该小而完备,不用暴露的方法不要做成public,减少依赖
优先使用组合
类继承通常为“白箱复用”,对象组合通常为“黑箱复用”。继承某种程度上破坏类封装性,提高耦合度。
封装变化点
使用封装来创建对象的分界层,让设计者可以在分界一侧进行修改,而不会对另一侧产生不良的影响
针对接口编程
不将变量类型声明为某个特定的具体类,而是声明为某个接口,客户程序无需获知对象的具体类型,只需要知道对象的接口,减少系统中各部分的依赖关系,从而实现“高内聚、 松耦合”