0-1 二十二手设计模式横向对比(C++版)

设计模式复杂度流行度使用示例识别方法
创建型模式工厂方法****工厂方法模式在 C++ 代码中得到了广泛使用。 当你需要在代码中提供高层次的灵活性时, 该模式会非常实用。工厂方法可通过构建方法来识别, 它会创建具体类的对象, 但以抽象类型或接口的形式返回这些对象。
抽象工厂*****抽象工厂模式在 C++ 代码中很常见。 许多框架和程序库会将它作为扩展和自定义其标准组件的一种方式。我们可以通过方法来识别该模式——其会返回一个工厂对象。 接下来, 工厂将被用于创建特定的子组件。
生成器*****生成器模式是 C++ 世界中的一个著名模式。 当你需要创建一个可能有许多配置选项的对象时, 该模式会特别有用。生成器模式可以通过类来识别, 它拥有一个构建方法和多个配置结果对象的方法。 生成器方法通常支持方法链 (例如 someBuilder->setValueA(1)->setValueB(2)->create() )。
原型***C++ 的 Cloneable  (克隆) 接口就是立即可用的原型模式。原型可以简单地通过 clone或 copy等方法来识别。
单例***许多开发者将单例模式视为一种反模式。 因此它在 C++ 代码中的使用频率正在逐步减少。单例可以通过返回相同缓存对象的静态构建方法来识别。
结构型模式适配器****适配器模式在 C++ 代码中很常见。 基于一些遗留代码的系统常常会使用该模式。 在这种情况下, 适配器让遗留代码与现代的类得以相互合作。适配器可以通过以不同抽象或接口类型实例为参数的构造函数来识别。 当适配器的任何方法被调用时, 它会将参数转换为合适的格式, 然后将调用定向到其封装对象中的一个或多个方法。
桥接****桥接模式在处理跨平台应用、 支持多种类型的数据库服务器或与多个特定种类 (例如云平台和社交网络等) 的 API 供应商协作时会特别有用。桥接可以通过一些控制实体及其所依赖的多个不同平台之间的明确区别来进行识别。
组合****组合模式在 C++ 代码中很常见, 常用于表示与图形打交道的用户界面组件或代码的层次结构。组合可以通过将同一抽象或接口类型的实例放入树状结构的行为方法来轻松识别。
装饰****装饰在 C++ 代码中可谓是标准配置, 尤其是在与流式加载相关的代码中。装饰可通过以当前类或对象为参数的创建方法或构造函数来识别。
外观***使用 C++ 开发的程序中会经常使用外观模式。 它在与复杂程序库和 API 协作时特别有用。外观可以通过使用简单接口, 但将绝大部分工作委派给其他类的类来识别。 通常情况下, 外观管理其所使用的对象的完整生命周期。
享元****享元模式只有一个目的: 将内存消耗最小化。 如果你的程序没有遇到内存容量不足的问题, 则可以暂时忽略该模式。享元可以通过构建方法来识别, 它会返回缓存对象而不是创建新的对象。
代理***尽管代理模式在绝大多数 C++ 程序中并不常见, 但它在一些特殊情况下仍然非常方便。 当你希望在无需修改客户代码的前提下于已有类的对象上增加额外行为时, 该模式是无可替代的。代理模式会将所有实际工作委派给一些其他对象。 除非代理是某个服务的子类, 否则每个代理方法最后都应该引用一个服务对象。
行为模式责任链***责任链模式在 C++ 程序中并不常见, 因为它仅在代码与对象链打交道时才能发挥作用。该模式可通过一组对象的行为方法间接调用其他对象的相同方法来识别, 而且所有对象都会遵循相同的接口。
命令****命令模式在 C++ 代码中很常见。 大部分情况下, 它被用于代替包含行为的参数化 UI 元素的回调函数, 此外还被用于对任务进行排序和记录操作历史记录等。命令模式可以通过抽象或接口类型 (发送者) 中的行为方法来识别, 该类型调用另一个不同的抽象或接口类型 (接收者) 实现中的方法, 该实现则是在创建时由命令模式的实现封装。 命令类通常仅限于一些特殊行为。
迭代器*****该模式在 C++ 代码中很常见。 许多框架和程序库都使用它来提供遍历其集合的标准方式。迭代器可以通过导航方法 (例如 next和 previous等) 来轻松识别。 使用迭代器的客户端代码可能没有其所遍历的集合的直接访问权限。
中介者****中介者模式在 C++ 代码中最常用于帮助程序 GUI 组件之间的通信。 在 MVC 模式中, 控制器是中介者的同义词。NULL
备忘录****备忘录的基本功能可用序列化来实现, 这在 C++ 语言中很常见。 尽管备忘录不是生成对象状态快照的唯一或最有效的方法, 但它能在保护原始对象的结构不暴露给其他对象的情况下保存对象状态的备份。NULL
观察者*****观察者模式在 C++ 代码中很常见, 特别是在 GUI 组件中。 它提供了在不与其他对象所属类耦合的情况下对其事件做出反应的方式。该模式可以通过将对象存储在列表中的订阅方法, 和对于面向该列表中对象的更新方法的调用来识别。
状态***在 C++ 语言中, 状态模式通常被用于将基于 switch语句的大型状态机转换为对象。状态模式可通过受外部控制且能根据对象状态改变行为的方法来识别。
策略****策略模式在 C++ 代码中很常见。 它经常在各种框架中使用, 能在不扩展类的情况下向用户提供改变其行为的方式。策略模式可以通过允许嵌套对象完成实际工作的方法以及允许将该对象替换为不同对象的设置器来识别。
模板方法***模版方法模式在 C++ 框架中很常见。 开发者通常使用它来向框架用户提供通过继承实现的、 对标准功能进行扩展的简单方式。模版方法可以通过行为方法来识别, 该方法已有一个在基类中定义的 “默认” 行为。
访问者****访问者不是常用的设计模式, 因为它不仅复杂, 应用范围也比较狭窄。NULL

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值