设计模式的学前小菜
重构获得模式Refactoring to Partterns
①”好的面向对象设计”是满足”应对变化,提高复用”
②”什么时候,什么地点应用设计模式”比”理解设计模式结构”更重要
③设计模式不宜先入为主, 应该是随着开发不断迭代/重构时使用合适的设计模式
重构关键技法
静态→动态
早绑定→晚绑定
继承→组合
编译时依赖→运行时依赖
紧耦合→>松耦合
其实这五种转换做得是一件事情!
在学习设计模式前, 需要掌握的三大概念: ①委托 ②继承 ③复合
通常设计模式都是这三种概念的排列组合
(例如: 委托+继承=观察者模式/组合模式/原型模式, 复合+继承=适配器模式等等)
八大面向对象设计原则
①依赖倒置原则(DIP)
-高层模块(稳定)不应该依赖于低层模块(变化), 二者都应该依赖于抽象(稳定)
-抽象(稳定)不应该依赖于实现细节(变化), 实现细节应该依赖于抽象(稳定)
②开放封闭原则(OCP)
-对扩展开放, 对更改封闭
-类模块应该是可扩展的, 但是不可修改
③单一职责原则(SRP)
-一个类应该仅有一个引起它变化的原因
-变化的方向隐含着类的责任
④Liskov替换原则(LSP)
-子类必须能够替换它们的基类(Is-A)
-继承表达类型抽象
⑤接口隔离原则(ISP)
-不应该强迫客户程序依赖它们不用的方法
-接口应该小而完备
⑥优先使用对象复合(Has-A), 而不是类继承
-类继承通常为”白箱复用”, 对象复合通常为”黑箱复用”
-继承在某种程度上破坏了封装性, 致子类父类耦合度过高
-而对象复合则只要求被复合的对象具有良好定义的接口, 耦合度低
⑦封装变化点
-使用封装来创建对象之间的分界层, 让设计者可以在分界层的一侧进行修改, 而不会对另一侧产生不良的影响, 从而实现层次间的松耦合
⑧针对接口编程, 而不是针对实现编程
-不将变量类型声明为某个特定的具体类, 而是声明为某个接口
-客户程序无需获知对象的具体类型, 只需要知道对象所具有的接口
-减少系统中各部分的依赖关系, 从而实现”高内聚,低耦合”的类型设计方案