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

组合模式 详解

组合模式

简介: 将对象组合成树形结构以表示"部分-整体"的层次结构, 使得用户对单个对象和组合对象的使用具有一致性.

组合模式也是一种结构类型的模式.看简介比较容易理解, 毕竟树形结构是数据结构必修的, 我们仍然举个例子方便理解
以公司的组织架构为例
公司 - 部门 - 员工
其中员工是叶子节点, 公司和部门是树枝节点
代码

class Node
{
private:string name;
public:Node(string s) : name(s) {};string get_name() { return name; };virtual void display() = 0;virtual void add_node(Node* n) = 0;
};class Leaf : public Node
{
public:Leaf(string s) : Node(s) {};void add_node(Node* n) override{cout << "leaf node can not add node" << endl;}void display(){cout << get_name() << endl;}
};class Branch : public Node
{
private:vector<Node*> nodes;
public:Branch(string s) : Node(s) {};void add_node(Node* n) override{nodes.push_back(n);}void display() override{cout << get_name() << endl;for (Node* m : nodes)m->display();}
};int main()
{Node* b = new Branch("公司");Node* b1 = new Branch("__研发部");Node* b2 = new Branch("__营销部");Node* b3 = new Leaf("____小明");Node* b4 = new Leaf("____小强");Node* b5 = new Leaf("____小刚");b->add_node(b1);b->add_node(b2);b1->add_node(b3);b2->add_node(b4);b2->add_node(b5);b->display();return 0;
}

执行结果
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • iPhone如何全选删除照片:一步到位的清理指南
  • 看书标记【数据科学:R语言实战 8】
  • VS Code安装与vue项目新建
  • 百数教学——企业互联,让业务合作跨越距离与障碍
  • java Arrays.fill方法介绍
  • SQL基础——函数与约束
  • MySQL:从入门到放弃
  • redis的数据结构——压缩表(Ziplist)
  • NVIDIA刚刚发布了关于 AI 的免费在线课程!
  • CVPR2023《DNF: Decouple and Feedback Network for Seeing in the Dark》暗光图像增强论文阅读笔记
  • Linux命令学习 -- tar指令
  • 232. 用栈实现队列
  • WKWebView加载项目中网页的资源图片路径异常
  • Django | 从中间件的角度来认识Django发送邮件功能
  • 基于windows10的WSL详细安装与使用教程
  • CSS 提示工具(Tooltip)
  • js
  • Mithril.js 入门介绍
  • opencv python Meanshift 和 Camshift
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • unity如何实现一个固定宽度的orthagraphic相机
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • windows下使用nginx调试简介
  • 分布式事物理论与实践
  • 区块链将重新定义世界
  • 如何学习JavaEE,项目又该如何做?
  • 使用common-codec进行md5加密
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​Java并发新构件之Exchanger
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • ${ }的特别功能
  • %@ page import=%的用法
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (Java入门)学生管理系统
  • (SpringBoot)第二章:Spring创建和使用
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (九十四)函数和二维数组
  • (算法设计与分析)第一章算法概述-习题
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)Linux+Windows下安装ffmpeg
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)http-server应用
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • ***通过什么方式***网吧
  • .NET Core 版本不支持的问题
  • .NET Core中的去虚
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)