GOF-23模式分类
从目的来看
从封装变化角度对模式分类
组件协作
定义通过晚期绑定实现框架与应用间的松耦合
模板方法
- 解决问题:框架的设计,固定一部分不变的代码在抽象类中
- 实现方法:多态,先写一个框架,对于变化部分用虚函数下放至子类实现
策略模式
- 解决问题:情况的扩展,应对超出原有设定的情况(switch)
- 实现方法:
- 设置所有情况的父类,
- 各情况分别各自实现子类,
- 调用时使用工厂模式的接口构成出对应情况的子类
- 特点:替代switch,if-else,实现策略的扩展性,还可以节省代码空间,运行依赖代替编译依赖
观察者模式
- 解决问题:建立通知依赖关系(例如Qt的信号与槽),从而实现松耦合
- 实现方法:
- 设计通知抽象类,包含绑定方法,解绑方法,通知方法,被通知队列,通知方法中加入一个循环,用于通知每个绑定者
- 设计接收抽象类,包含事件处理方法
- 构造通知对象,接收对象,调用通知对象的绑定方法,把接收对象指针传入,实现二者的绑定
- 特点:本质上其实一种回调的形式,只是以往C传的是的函数指针,C++传的是对象指针
事件模式
单一职责
桥 模式
对象创建
绕开new 避免对象创建时的紧耦合(依赖具体类)