0

0

C++行为型模式 对象间交互模式设计

P粉602998670

P粉602998670

发布时间:2025-09-11 09:09:01

|

381人浏览过

|

来源于php中文网

原创

c++行为型模式 对象间交互模式设计

在C++中,行为型模式关注的是对象之间的职责分配与通信机制,它们帮助我们设计出更灵活、可维护、可扩展的对象交互方式。这些模式不只解决“对象如何创建”或“类如何组织”的问题,而是聚焦于“对象之间如何协作”。下面介绍几种常见的行为型设计模式及其在C++中的应用方式。

1. 观察者模式(Observer Pattern)

观察者模式定义了对象之间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会自动收到通知。

在C++中,通常通过抽象基类定义观察者接口,被观察者维护一个观察者列表,并在状态变化时调用其更新方法。

  • 被观察者(Subject)提供添加、删除和通知观察者的方法。
  • 观察者(Observer)继承统一接口,实现update()函数。
  • 适用于事件处理系统、GUI组件更新、模型-视图架构等。

优点是解耦了目标与观察者,缺点是可能出现内存泄漏(若未及时注销观察者)。

立即学习C++免费学习笔记(深入)”;

2. 策略模式(Strategy Pattern)

策略模式将算法的实现封装到独立的类中,使算法的变化独立于使用它的客户端。

在C++中,可通过基类定义策略接口,不同策略继承并实现该接口,上下文类持有一个策略指针,运行时动态切换。

  • 避免使用大量条件语句选择算法。
  • 便于扩展新策略而不修改原有代码。
  • 常用于排序、压缩、加密等可变行为的封装。

例如:一个绘图程序根据不同渲染策略(OpenGL、DirectX)切换绘制方式。

3. 命令模式(Command Pattern)

命令模式将请求封装为对象,从而使你可以用不同的请求对客户进行参数化,并支持请求的队列、记录日志、撤销等功能。

C++中,定义一个Command基类,包含execute()和undo()方法,具体命令类实现具体操作,调用者(Invoker)持有命令对象并触发执行。

E购-新零售系统
E购-新零售系统

“米烁云货宝”,是一款基于云计算的Saas模式新零售系统。以互联网为基础,通过大数据、人工智能等先进技术,对商品的生产、流通、销售、服务等环节转型升级改造,进而重塑业态结构与生态圈。并对线上交易运营服务、线下体验购买及现代物流进行深度融合,所形成的零售新模式。

下载
  • 实现操作的延迟执行、批量执行或撤销重做。
  • 解耦请求发送者与接收者。
  • 适合实现菜单命令、宏操作、事务系统。

注意内存管理:命令对象可能需要深拷贝或使用智能指针管理接收者。

4. 状态模式(State Pattern)

状态模式允许一个对象在其内部状态改变时改变其行为,看起来像是改变了类。

在C++中,通常定义一个State基类,各个具体状态继承它并实现对应行为。上下文对象持有当前状态指针,行为委托给状态对象。

  • 替代复杂的条件判断语句(如switch)。
  • 每个状态可独立变化,易于添加新状态。
  • 适用于有限状态机场景,如网络连接、游戏角色行为。

关键点是状态切换时要正确转移状态对象,避免空指针访问。

5. 职责链模式(Chain of Responsibility)

职责链模式让多个对象有机会处理请求,从而避免请求的发送者与接收者之间的耦合。请求沿着链传递,直到被处理。

C++中,每个处理者持有下一个处理者的指针,若无法处理则转发请求。

  • 适用于审批流程、事件冒泡、异常处理等场景。
  • 增加灵活性,但可能造成请求未被处理或性能下降。
  • 可结合模板或函数对象简化实现。

建议设置默认处理器或超时机制防止请求丢失。

基本上就这些常见的行为型模式。它们都致力于提升对象交互的灵活性和可维护性。在C++中使用时,注意结合RAII、智能指针、虚函数和多态机制,避免内存泄漏和对象生命周期问题。设计时优先考虑接口抽象,而非具体实现,才能真正发挥模式的价值。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

544

2023.09.21

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

424

2024.03.13

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

15

2025.11.27

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1206

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

235

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2181

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.01.19

空指针异常处理
空指针异常处理

本专题整合了空指针异常解决方法,阅读专题下面的文章了解更多详细内容。

22

2025.11.16

AO3官网入口与中文阅读设置 AO3网页版使用与访问
AO3官网入口与中文阅读设置 AO3网页版使用与访问

本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

29

2026.02.02

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 教程
Django 教程

共28课时 | 3.8万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.4万人学习

Sass 教程
Sass 教程

共14课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号