目标
- 理解松耦合设计思想
- 掌握面向对象设计原则
- 掌握重构技法改善设计
- 掌握GOF核心设计模式
《设计模式 可复用面向对象软件的基础》
底层思维
向下,如何把握机器底层 从微观理解对象构造
* 语言构造
* 编译转换
* 内存模型
* 运行时机制
深入理解面向对象
向下:深入理解三大面向对象机制
* 封装, 隐藏内部实现
* 继承, 复用现有代码
* 多态, 改写对象行为
抽象思维
向上,如何将我们的周围世界抽象为程序代码
* 面向对象
* 组件封装
* 设计模式
* 架构模式
如何解决复杂性
分解
- 分而治之
抽象
- 多态
- 只需修改很少的代码
复用
八大面向对象设计原则
* 依赖倒置原则(DIP)
隔离变化
* 开放封闭原则(OCP)
对扩展开放,对更改封闭
* 单一职责原则(SRP)
一个类应该仅有一个引起它变化的原因
变化的方向隐含着类的责任
* Liskov替换原则(LSP)
子类必须能够替换他们的基类(is a)
* 接口隔离原则(ISP)
接口应该小而完备
* 优先使用对象组合(黑箱复用),而不是类继承(白箱复用)
继承在某种程度上破坏了封装性,子类父类耦合度高
而对象组合只要求被组合的对象具有良好定义的接口
* 封装变化点
* 针对接口编程,而不是针对实现编程
高内聚、松耦合
接口标准化
GOF-23模式分类
从目的来看
* 创建型 Creational
* 结构型 Structural
* 行为型 Behavioral
从范围来看
* 类模式处理类与子类的静态关系
* 对象模式处理对象间的动态关系
从封装变化角度对模式分类
组件协作
现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用之间的松耦合,是二者之间协作时常用的模式
* Template Method 模版方法
稳定 变化
* Strategy 策略模式
扩展 而不是更改源码 遵循开闭原则 if-else
定义一系列算法,把他们一个个封装起来,并且使它们可互相变化(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)
* Observer/Event
单一职责
* Decorator
* Bridge
对象创建
* Factory Method
* Abstract Factory
* Prototype
* Builder
对象性能
* Singleton
* Flyweight
接口隔离
* Facade
* Proxy
* Mediator
* Adapter
状态变化
* Memento
* State
数据结构
* Composite
* Iterator
* Chain of Resposibility
行为变化
* Command
* Visitor
领域问题
* Interpreter
应对变化 提高复用
重构书籍推荐
《重构–改善既有代码的设计》
《重构与模式》
重构关键技法
静态 ->动态
早绑定 -> 晚绑定
继承 -> 组合
编译时依赖 -> 运行时依赖
紧耦合 -> 松耦合
v1.5.2