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

【C++】组合模式

目录

  • 一、模式核心概念与结构
  • 二、C++ 实现示例:文件系统
  • 三、组合模式的关键特性
  • 四、应用场景
  • 五、组合模式与其他设计模式的关系
  • 六、C++ 标准库中的组合模式应用
  • 七、优缺点分析
  • 八、实战案例:图形编辑器
  • 九、实现注意事项
    • 如果这篇文章对你有所帮助,渴望获得你的一个点赞!

组合模式(Composite Pattern)是一种【结构型】设计模式,它允许你将对象组合成树形结构以表示 “部分 - 整体” 的层次关系。这种模式使得客户端可以统一处理单个对象和对象组合,无需区分它们的具体类型。

一、模式核心概念与结构

组合模式包含三个核心角色:

  1. 组件(Component):定义组合中所有对象的通用接口,声明管理子组件的方法。
  2. 叶节点(Leaf):表示组合中的叶节点对象,没有子节点,实现组件接口。
  3. 组合节点(Composite):表示组合中的分支节点,包含子组件,实现组件接口并管理子组件。

二、C++ 实现示例:文件系统

以下是一个经典的组合模式示例,演示如何用组合模式表示文件系统:

#include <iostream>
#include <string>
#include <vector>
#include <memory>// 组件:文件系统元素
class FileSystemElement {
public:virtual ~FileSystemElement() = default;virtual void print(int depth = 0) const = 0;virtual size_t getSize() const = 0;virtual void add(std::shared_ptr<FileSystemElement> element) {}virtual void remove(std::shared_ptr<FileSystemElement> element) {}
};// 叶节点:文件
class File : public FileSystemElement {
private:std::string name;size_t size;public:File(const std::string& n, size_t s) : name(n), size(s) {}void print(int depth) const override {std::cout << std::string(depth * 2, ' ') << "- " << name << " (file, " << size << " bytes)" << std::endl;}size_t getSize() const override {return size;}
};// 组合节点:目录
class Directory : public FileSystemElement {
private:std::string name;std::vector<std::shared_ptr<FileSystemElement>> children;public:Directory(const std::string& n) : name(n) {}void print(int depth) const override {std::cout << std::string(depth * 2

相关文章:

  • 网站单页在线制作微信小程序
  • 网站开发环境怎么写seo推广一年要多少钱
  • 杭州四喜做网站建设么cps推广接单平台
  • 同步网站内容怎么做友情链接购买
  • 做3dmax的网站推广网页
  • 网站 备案 几天西安网站建设公司十强
  • GitLab 18.1 发布依赖列表过滤、合规状态报告控制状态弹窗,可升级体验!
  • 前端框架大乱斗:React、Vue 和 Angular 的相爱相杀
  • 连接打印机0x0000011b错误两种完美解决方法
  • LightGBM:极速梯度提升机——结构化数据建模的终极武器
  • 数据结构进阶 第六章 树与二叉树
  • MongoDB 相关知识文档
  • YOLOv13:目标检测的全面攻略与实战指南
  • 进程和线程的区别?
  • 组织策略性陪伴顾问
  • 认识Jacobian
  • Java 大视界 -- Java 大数据机器学习模型在卫星通信信号干扰检测与智能抗干扰中的应用(323)
  • 【机器学习第一期(Python)】梯度提升决策树 GBDT
  • 2D写实交互数字人如何重塑服务体验?
  • 4.2_1朴素模式匹配算法
  • DevSecOps时代下测试工具的全新范式:从孤立到融合的质变之路
  • gitlab https链接转为ssh链接
  • 数栈 × AWS EMR On EC2 适配实践:打造出海企业可落地的云上数据中台解决方案
  • ​​深入详解单片机中的输入阻抗与输出阻抗​
  • Android Studio flutter项目运行、打包时间太长
  • 在Visual Studio使用Qt的插件机制进行开发