设计模式:可复用的面向对象
简介
-
底层思维(向下)
- 语言构造
- 编译转换
- 内存模型
- 运行时机制
-
抽象思维(向上)
- 面向对象
- 组件封装
- 设计模式
- 架构模式
-
面向对象
- 机制:
- 封装,隐藏内部实现
- 继承,复用现有的代码
- 多态,改写对象行为
- 构建可复用的对象
- 机制:
-
软件设计复杂的根本原因
- 变化
-
如何解决复杂性
-
分解
分而治之,把复杂的问题分解为多个简单的问题,例如:C
-
抽象
忽略非本质的细节,处理泛化和理想化的对象模型
-
-
软件设计的目标
复用
面向对象设计原则
-
面向对象
- 隔离变化
- 变化影响最小
- 各司其职
- 接口一样,实现不同
- 对象是什么
- 封装了代码和数据
- 规格上,对象是一系列可被使用的接口
- 概念上,某种拥有责任的抽象
- 隔离变化
-
设计原则
-
依赖倒置原则(DIP)
-
高层模块(稳定)不应该依赖低层模块(变化),二者都应该依赖于抽象
-
抽象(稳定)不应该依赖于实现细节(变化),实现细节应该依赖于抽象
-
-
开放封闭原则(OCP)
- 对扩展开放,对更改封闭
- 类模块应该是可扩展的,但是不可修改的
-
单一职责原则(SRP)
- 一个类应该仅有一个引起它变化的原因
- 变化的方向隐含着类的责任
-
Liskov替换原则(LSP)
- 子类必须能够替换它们的基类
- 继承表达类型抽象
-
接口隔离原则(ISP)
- 不应该强迫客户程序依赖它们不用的方法
- 接口应该小而完备
-
优先使用对象组合,而不是类继承
- 类继承通常为“白箱复用”,对象组合通常为“黑箱复用”
- 继承在某种程度上破坏了封装性,子类父类耦合度高
- 对象组合则之要求被组合的对象具有良好定义的接口,耦合度是低的
-
封装变化点
- 使用封装创建对象之间的分界层,让设计者在一侧修改,对另一侧没有影响
-
针对接口编程,而不是针对实现编程
- 不将变量设计为特定的类型,而是一个接口,使用通用的方法
- 客户程序不需要知道具体类型,只需要知道对象接口
- 减少依赖,实现高内聚,低耦合的设计
-
-
面向接口设计
- 接口标准化
-
将设计原则提升为设计经验
- 设计习语
- 设计模式
- 架构模式
模板方法
-
模式分类
- 目的
- 创建型模式
- 结构型模式
- 行为型模式
- 范围
- 类模式处理类与子类的静态关系
- 对象模式处理对象之间动态关系
- 封装变化角度分类
待补充
-
重构获得模式
- 寻找变化点,并在变化点处应用设计模式,明白应用的时候
- 没有一步到位的设计模式 《敏捷开发之道》,《重构与模式》
-
重构的关键技法
- 静态->动态
- 早绑定->晚绑定
- 继承->组合
- 编译时依赖->运行时依赖
- 紧耦合->松耦合
-
组建协作模式
-
晚绑定,实现组件的松耦合
-
Template Method
早绑定与晚绑定
- 晚绑定 早的东西调用晚的东西
定义一个操作中的算法结构(稳定),而将一些步骤延迟(变化)到子类中,但是子类可以定义其中一些方法,不改变原本的算法结构
稳定中有变化
template_method_.h
-
Strategy
-
Observer/Event
-
-
浙公网安备 33010602011771号