当前位置: 首页 > news >正文

揭秘组合模式:C++设计模式的奥秘与应用!

在C++中,组合模式是一种结构型设计模式,它允许你将对象组合成树形结构来表示部分-整体的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性。

下面是一个简单的C++代码示例,展示了如何实现组合模式:

#include <iostream>
#include <vector>
#include <memory>// 抽象组件类
class Component {
public:virtual ~Component() = default;virtual void operation() = 0;
};// 叶子类
class Leaf : public Component {
public:void operation() override {std::cout << "Leaf operation" << std::endl;}
};// 组合类
class Composite : public Component {
private:std::vector<std::shared_ptr<Component>> children;
public:void add(std::shared_ptr<Component> component) {children.push_back(component);}void operation() override {std::cout << "Composite operation" << std::endl;for (const auto& child : children) {child->operation();}}
};int main() {auto root = std::make_shared<Composite>();auto child1 = std::make_shared<Leaf>();auto child2 = std::make_shared<Composite>();auto grandchild = std::make_shared<Leaf>();child2->add(grandchild);root->add(child1);root->add(child2);root->operation();return 0;
}
 

在这个示例中,我们定义了一个抽象基类Component,它有一个虚函数operation()。然后我们定义了一个叶子类Leaf,它继承自Component并实现了operation()函数。接下来,我们定义了一个组合类Composite,它也继承自Component,并包含一个Component类型的向量children来存储子对象。Composite类还重写了operation()函数,以便在调用时遍历并调用其子对象的operation()函数。

main()函数中,我们创建了一个组合对象的树形结构,并调用了根对象的operation()函数,从而递归地调用了整个树形结构中的所有对象的operation()函数。

这就是C++中实现组合模式的一个简单示例。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《基础模型时代的图像分割》研究综述
  • 视频素材网站无水印的有哪些?热门视频素材网站分享!
  • 文心快码帮你解大厂面试题:一次请求从浏览器进入到Sping框架的服务,整个请求的生命周期是什么?
  • HTB-lgnition(curl工具、yakit、 弱口令)
  • Git —— 2、配置本地与远程免密仓库免密访问、实操创建本地仓库与上github新仓库关联
  • stm32之硬件I2C读写MPU6050陀螺仪、加速度传感器应用案例
  • 2024杭电6
  • Spring之整合Mybatis底层源码解析
  • 万字文档带你走进Python的世界
  • 一图打尽C++内存分区(分段)
  • 力扣9.2
  • World of Warcraft [CLASSIC][80][Grandel]Sapphire Hive Drone
  • Nvidia股价前景引投资者情绪波动:杠杆ETF数据透视市场风向
  • k8s集群搭建
  • 工业软件架构4:(QT和C++实现)
  • Google 是如何开发 Web 框架的
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • C++11: atomic 头文件
  • export和import的用法总结
  • git 常用命令
  • GitUp, 你不可错过的秀外慧中的git工具
  • HTTP那些事
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • java正则表式的使用
  • Just for fun——迅速写完快速排序
  • KMP算法及优化
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • 订阅Forge Viewer所有的事件
  • 构建工具 - 收藏集 - 掘金
  • 规范化安全开发 KOA 手脚架
  • 缓存与缓冲
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 前端代码风格自动化系列(二)之Commitlint
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • HanLP分词命名实体提取详解
  • 回归生活:清理微信公众号
  • # 职场生活之道:善于团结
  • $.ajax()参数及用法
  • (1) caustics\
  • (C++17) std算法之执行策略 execution
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)图像的%2线性拉伸
  • (译)2019年前端性能优化清单 — 下篇
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • ./configure,make,make install的作用(转)
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net core + vue 搭建前后端分离的框架