
c++版本设计模式
文章平均质量分 92
本专栏将带你深入探索多种经典设计模式,助你编写更优雅、可维护的代码。
攻城狮7号
(广交天下好友)个人主要从事多年c/c++研发,同时熟悉其他开发语言,涉猎跨平台客户端和底层开发,以及前后端开发
展开
-
【第23节】C++设计模式(行为模式)-Interpreter(解释器)模式
Interpreter 模式在以下场景中非常有用:(1)解析配置文件:例如 XML、JSON 等格式的配置文件。(2)查询语言:例如 SQL 查询解析器。(3)规则引擎:例如业务规则的解释和执行。在实际开发中,Interpreter 模式可以与其他设计模式结合使用。例如:(1)使用 **Flyweight 模式** 共享终结符对象,减少内存占用。(2)使用 **Composite 模式** 构建复杂的语法树。原创 2025-03-09 00:23:28 · 870 阅读 · 0 评论 -
【第22节】C++设计模式(行为模式)-Iterator(迭代器)模式
Iterator 模式的应用非常广泛,尤其是在需要对聚合对象进行遍历时。通过将遍历逻辑封装到独立的 Iterator 类中,我们可以实现以下优点:(1)简化遍历操作:客户端代码只需要调用 Iterator 的接口即可完成遍历,无需关心聚合对象的内部实现。(2)提高代码复用性:可以为不同的聚合对象提供统一的遍历接口。(3)增强灵活性:可以在不修改聚合对象的情况下,扩展或修改遍历逻辑。在实际开发中,STL 提供的 Iterator 就是一个典型的应用。原创 2025-03-08 00:05:04 · 812 阅读 · 0 评论 -
【第21节】C++设计模式(行为模式)-Chain of Responsibility(责任链)模式
Chain of Responsibility 模式的最大优点在于它降低了系统的耦合性。请求的发送者无需知道具体的处理者,只需将请求传递给责任链中的第一个对象即可。这种设计模式非常适合以下场景:(1)多级处理:当请求需要经过多个对象处理时,可以使用责任链模式。(2)动态处理:可以在运行时动态地调整责任链中的处理对象。(3)解耦:请求的发送者和处理者之间完全解耦,系统更加灵活。原创 2025-03-08 00:04:13 · 1206 阅读 · 0 评论 -
【第20节】C++设计模式(行为模式)-Visitor(访问者)模式
Visitor 模式可以在不修改 `Element` 类的情况下为其增加新的操作,但这也带来了一些问题:(1)破坏了封装性:Visitor 模式要求 Visitor 可以从外部修改 Element 对象的状态,这通常通过以下两种方式实现:Element 提供足够的 public 接口,使得 Visitor 可以通过调用这些接口修改 Element 的状态。Element 暴露更多的细节给 Visitor,或者将 Visitor 声明为 Element 的 friend 类。原创 2025-03-07 13:55:53 · 930 阅读 · 0 评论 -
【第19节】C++设计模式(行为模式)-Command(命令)模式
Command 模式的思想非常简单,但是 Command 模式也十分常见,并且威力不小。实际上,Command 模式关键就是提供一个抽象的 Command 类,并将执行操作封装到 Command 类接口中,Command 类中一般就是只是一些接口的集合,并不包含任何的数据属性(当然在示例代码中,我们的 Command 类有一个处理操作的 Receiver 类的引用,但是其作用也仅仅就是为了实现这个 Command 的 Execute 接口)。原创 2025-03-07 13:41:38 · 1082 阅读 · 0 评论 -
【第18节】C++设计模式(行为模式)-Mediator(中介者)模式
Mediator 模式的核心思想是通过一个中介者对象来封装一组对象之间的交互。这样,对象之间不再直接通信,而是通过中介者进行间接通信。(1)Mediator(中介者):定义一个接口用于与各 Colleague 对象通信。实现 Mediator 接口,协调各 Colleague 对象之间的交互。每个 Colleague 对象都知道它的 Mediator 对象,并通过 Mediator 与其他 Colleague 对象通信。原创 2025-03-06 14:02:27 · 966 阅读 · 0 评论 -
【第17节】C++设计模式(行为模式)-Memento(备忘录)模式
Memento 模式的核心思想是在不暴露对象内部结构的情况下,保存对象的内部状态。通过这种方式,用户可以在需要时将对象恢复到之前的状态。负责创建一个 Memento 对象,用以保存当前状态,并可以使用 Memento 对象恢复到之前的状态。用于存储 Originator 的内部状态。负责保存 Memento 对象,但不能对 Memento 的内容进行操作或检查。Memento 模式常用于需要实现撤销操作的场景,尤其是在 Command 模式中。通过 Memento 模式,可以轻松地实现多级撤销操作。原创 2025-03-06 10:20:54 · 977 阅读 · 0 评论 -
【第16节】C++设计模式(行为模式)-Observer(观察者)模式
观察者模式是软件开发中非常重要的模式之一,广泛应用于以下场景:(1)MVC 架构:Model 是 Subject,View 是 Observer,当 Model 数据变化时,View 会自动更新。(2)事件驱动系统:例如 GUI 框架中的事件处理机制。(3)发布-订阅系统:Subject 是发布者,Observer 是订阅者,订阅者会收到发布者的通知。在 Java 中,观察者模式通过 `Observable` 类和 `Observer` 接口实现。原创 2025-03-05 10:21:16 · 1401 阅读 · 0 评论 -
【第15节】C++设计模式(行为模式)-State(状态)模式
状态模式的应用场景主要包括:(1)行为依赖状态:对象行为随状态动态变化时,如电梯、订单状态。(2)消除条件分支:减少大量条件语句,如游戏角色行为、交通灯状态。(3)复杂状态转换:状态转换逻辑复杂时,如工作流任务、线程生命周期。(4)多状态共存:对象同时处于多个状态时,如文件状态、用户权限。(5)状态与行为解耦:将状态和行为分离,如网络连接、播放器状态。(6)状态历史记录:支持状态记录和回滚,如文本编辑器撤销、事务回滚。(7)状态可扩展性:方便添加新状态,如游戏角色状态、设备状态。原创 2025-03-05 10:10:00 · 986 阅读 · 0 评论 -
【第14节】C++设计模式(行为模式)-Strategy (策略)模式
Strategy 模式和 Template 模式解决了类似的问题,但它们采用了不同的实现方式:Strategy 模式通过组合(委托)实现算法的异构,而 Template 模式则通过继承实现。继承的优缺点(1)易于修改和扩展被复用的实现。(1)破坏了封装性,父类的实现细节暴露给子类;(2)属于“白盒”复用;(3)当父类的实现更改时,所有子类都需要随之改变;(4)继承的实现在运行期间不能改变(编译期间已确定)。组合的优缺点(1)属于“黑盒”复用,被包含对象的内部细节对外不可见;原创 2025-03-04 10:21:32 · 932 阅读 · 0 评论 -
【第13节】C++设计模式(行为模式)-Template(模板)模式
Template 模式是一种简单但应用广泛的设计模式。通过继承的方式,Template 模式实现了算法的异构性,其关键点在于将通用算法封装在抽象基类中,而将不同的算法细节放到子类中实现。Template 模式还实现了一种反向控制结构,这符合面向对象设计中的 **依赖倒置原则(DIP)**。DIP 的核心思想是高层模块(父类)调用低层模块(子类)的操作,低层模块实现高层模块声明的接口。这样,控制权在父类(高层模块),而低层模块则依赖于高层模块。原创 2025-03-04 00:34:26 · 887 阅读 · 0 评论 -
【第12节】C++设计模式(结构型模式)-Proxy(代理)模式
Proxy 模式是一种结构型设计模式,它通过引入一个代理对象来控制对原始对象的访问。代理对象与原始对象实现相同的接口,客户端通过代理对象间接访问原始对象。Proxy 模式的核心思想是将客户端与原始对象解耦,从而在不改变客户端代码的情况下增强或控制对原始对象的访问。Proxy 模式的优点(1)延迟加载:通过虚代理,可以延迟对象的创建,直到真正需要时才创建对象。(2)远程访问:通过远程代理,可以简化客户端对远程对象的访问。(3)访问控制:通过保护代理,可以实现对对象的访问控制。原创 2025-03-03 11:09:31 · 742 阅读 · 0 评论 -
【第11节】C++设计模式(结构型模式)-Facade(外观)模式
Facade 模式(外观模式)是一种结构型设计模式,旨在为复杂的子系统提供一个简化的接口。它的核心思想是引入一个 **Facade 类**,将客户端与子系统的多个组件解耦。客户端只需要与 Facade 类交互,而无需直接调用子系统的复杂逻辑。Facade 模式的优点(1)简化接口:Facade 模式通过提供一个高层接口,简化了客户端对子系统的调用。(2)解耦:客户端与子系统之间通过 Facade 类进行交互,降低了它们之间的耦合度。原创 2025-03-03 10:18:05 · 1385 阅读 · 0 评论 -
【第十节】C++设计模式(结构型模式)-Flyweight(享元)模式
享元模式通过共享细粒度对象,有效地减少了系统中的对象数量,从而降低了存储开销。它特别适用于需要创建大量相似对象的场景,如文档编辑器、游戏中的粒子系统等。通过合理使用享元模式,可以显著提高系统的性能和资源利用率。在以后讲到的状态模式(State Pattern)和策略模式(Strategy Pattern)中,可能会产生大量的对象,因此可以通过享元模式来优化存储开销。享元模式的核心思想是共享对象,从而减少系统中对象的数量,降低存储和计算资源的消耗。设计模式精解-GoF 23种设计模式解析。原创 2025-02-27 10:22:08 · 1031 阅读 · 0 评论 -
【第九节】C++设计模式(结构型模式)-Composite(组合)模式
组合模式通过统一接口简化了树形结构的操作,尤其适用于需要递归处理对象的场景。其核心在于以一致的方式对待单个对象和组合对象,从而降低代码复杂度并提高扩展性。原创 2025-02-26 14:11:05 · 670 阅读 · 0 评论 -
【第八节】C++设计模式(结构型模式)-Decorator(装饰器)模式
模式对比:装饰器 vs 代理 vs 组合若装饰器仅持有具体组件(非抽象接口),其结构将与代理模式高度相似,但两者意图截然不同。装饰器模式与组合模式(Composite Pattern)在结构上有些相似,但它们的主要区别在于应用场景和目的。装饰器模式与代理模式(Proxy Pattern)在某些方面也有相似之处。虽然它们在结构图上并不相似,但如果让 `Decorator` 直接持有一个 `ConcreteComponent` 的引用(指针),其结构图就与代理模式非常相似了。原创 2025-02-26 10:48:09 · 1069 阅读 · 0 评论 -
【第七节】C++设计模式(结构型模式)-Adapter(适配器)模式
适配器模式的核心在于解决接口不兼容的问题。它通过以下两种方式实现:类适配器模式:通过多重继承实现接口适配。对象适配器模式:通过对象组合实现接口适配。在C++中,`public`继承既是接口继承又是实现继承,而`private`继承则仅用于实现继承。通过纯抽象基类可以模拟接口继承,但其效果不如Java中的`interface`纯粹。适配器模式不仅能够解决接口不兼容的问题,还能够提高代码的复用性和系统的灵活性,是面向对象设计中不可或缺的重要模式。以下是适配器模式的主要优缺点:优点。原创 2025-02-25 14:23:49 · 1037 阅读 · 0 评论 -
【第六节】C++设计模式(结构型模式)-Bridge(桥接)模式
桥接模式通过解耦抽象与实现,有效地解决了面向对象设计中的类爆炸问题。它不仅提高了系统的可维护性,还为系统的扩展提供了更大的灵活性。理解并掌握桥接模式,将使你的设计更加优雅和高效。原创 2025-02-25 11:54:15 · 1543 阅读 · 1 评论 -
【第五节】C++设计模式(创建型模式)-Prototype(原型)模式
Prototype 模式通过复制原型对象来创建新对象,这种方式特别适用于以下场景:(1)当对象的创建过程比较复杂,且需要频繁创建相似对象时。(2)当需要避免重复初始化对象的开销时。与其他创建型模式(如 Builder 模式和 AbstractFactory 模式)相比,Prototype 模式的独特之处在于:Builder 模式:侧重于逐步构建复杂对象,而不是直接返回对象。AbstractFactory 模式:用于创建一系列相互依赖的对象。原创 2025-02-24 13:59:10 · 800 阅读 · 0 评论 -
【第四节】C++设计模式(创建型模式)-Builder(建造者)模式
核心思想Builder 模式的核心思想是将复杂对象的构建过程分解为多个步骤,并通过一个指导者(Director)对象来协调这些步骤。这样做的好处是:构建过程与表示分离:对象的构建过程独立于其最终表示,使得相同的构建过程可以生成不同的对象。灵活性:通过在每一步骤中引入参数,可以灵活地调整对象的构建过程。适用场景Builder 模式适用于以下场景:需要创建的对象非常复杂,由多个部分组成。对象的构建过程需要分步骤进行,且每个步骤可能需要不同的参数。原创 2025-02-22 14:13:41 · 1633 阅读 · 2 评论 -
【第三节】C++设计模式(创建型模式)-单例模式
Meyer's Singleton 是C++11+项目的黄金标准,兼顾线程安全和代码简洁性双检锁适用于遗留代码维护,但需谨慎处理指令重排序饿汉式适合轻量级、高频访问的核心服务,但需注意初始化顺序问题选择策略应基于项目标准、性能需求和资源约束,现代C++开发中**Meyer's Singleton应作为首选方案**。原创 2025-02-21 20:23:09 · 975 阅读 · 0 评论 -
【第二节】C++设计模式(创建型模式)-抽象工厂模式
(1) 核心思想抽象工厂模式通过定义一个创建一系列相关或相互依赖对象的接口,将具体对象的创建工作封装到具体的工厂类中。它强调面向接口编程,支持多种变化需求,同时确保生成的对象的关联性和兼容性。(2)与工厂方法模式的关系工厂方法模式:解决单一对象的创建问题,通过子类化实现对象的创建。抽象工厂模式:解决一系列相互依赖对象的创建问题,通过一个工厂类创建多个相关对象。(3)主要解决的问题避免直接使用 `new` 操作符导致的对象绑定问题。支持多种变化需求(如多种数据库、多种产品系列)。原创 2025-02-20 10:54:36 · 1237 阅读 · 0 评论 -
【第一节】C++设计模式(创建型模式)-工厂模式
在面向对象系统设计中,开发者常常面临两类典型的对象创建问题。为了解决这些问题,工厂模式(Factory Pattern)应运而生,成为了一种广泛应用的解决方案。本文将详细探讨这两类问题,并分析工厂模式的功能、实现及其在实际开发中的应用。工厂模式是面向对象设计中解决对象创建问题的经典模式。它通过封装对象创建过程和延迟实例化到子类,有效地降低了代码的耦合性,提高了系统的扩展性和灵活性。尽管工厂模式可能增加类的数量和系统的复杂性,但其在解耦和支持变化方面的优势使其在实际开发中得到了广泛应用。原创 2025-02-19 11:28:30 · 1592 阅读 · 4 评论