快速回顾
类别 | 名称 | 应用场景 | 例子 |
创建型模式 | Factory模式 | 统一公用接口 | |
AbstactFactory模式 | 统一公用接口 | ||
Singleton模式 | 只构建一次,每次构建只返回自己 | ||
Builder模式 | 一步步的进行复杂对象的构建 | 链式构造器,解决复杂对象多个属性可选择性地设置的问题,保证对象构造是原子操作 | |
Prototype模式 | 通过自身复制构建新对象 | ||
结构型模式 | Bridge模式 | 存在多个维度抽象继承,造成类过多的问题。 备注:通过组合多个维度的抽象来解决继承的问题。 | 笔与颜色两个维度抽象,如果是蜡笔,笔和颜色是合并在一起的,只能按笔和颜色的组合数量创建对应数量的类。如果是毛笔和颜料,笔和颜色是分离的,这个时候应该用Bridge模式,通过组合的方式,把笔和颜色两个类组合在一起,而不应该通过继承的方式,将子类同时继承笔类和颜色类。 |
Adapter模式 | 调用第三方库同时要适配已设计好的接口 | ||
Decorator模式 | 一个类需要经常添加新的方法。 备注:通过组合新方法类的方式来解决继承的问题。 | ||
Composite模式 | 递归构建树状的组合结构 | ||
Flyweight模式 | 存在大量轻量级对象造成内存开销过大 | 将对象的状态分为“外部状态”和“内部状态”,将可以被共享(不会变化)的状态作为内部状态存储在对象中,而外部对象(例如字体、大小等)我们可以在适当的时候将外部对象作为参数传递给对象(例如在显示的时候,将字体、大小等信息传递给对象)。 std::map<object> | |
Facade模式 | 只提供简单接口,不关心实现这个接口的具体内容 | 将其他类对象包含在一个类中,只暴露该类中别人感兴趣的接口 | |
Proxy模式 | 将事情委托给另一个程序(类)执行,或解决不能立即获得结果的程序(类) | 异步操作、智能指针 | |
行为模式 | Template模式 | 父类实现流程逻辑,子类实现具体细节 | 多态实现 |
Strategy模式 | 解决Template模式父类流程逻辑无法更改拓展的缺点,以牺牲空间和时间为代价换取灵活性 | 以组合代替继承 | |
State模式 | 因存在不同状态需要大量使用switch/case时 | 与Strategy模式类似 | |
Observer模式 | 数据更新需要显示也一起刷新 | MVC模型 | |
Memento模式 | 需要恢复现场操作时 | 撤销操作 | |
Mediator模式 | 大量对象间交互时,将多对多交互变成一对多 | ||
Command模式 | 实现调用操作的对象和操作的具体实现者之间的解耦 | 请求和命令分离实现 | |
Visitor模式 | 有新需求要更改原类时 | 不推荐,破坏封装性 | |
Chain of Responsibility模式 | 链式处理任务 | MFC的消息机制 | |
Iterator模式 | 聚合对象的遍历问题 | STL的迭代器 | |
Interpreter模式 | 使用一个解释器为用户提供一个一门定义语言的语法表示的解释器,然后通过这个解释器来解释语言中的句子 | XML语法解释器 |
创建型模式
1. builder模式
原理:Builder定义接口,concreteBuilder继承Builder,concreteBuilder一步步创建Product,Director通过输入不同的concreteBuilder达到创建不同Product的目的。
结构型模式
2. Bridge模式