设计模式--组合模式

2023-11-19

    组合模式:又叫部分整体模式,属于结构型模式。
    基本原理:以树形的结构将相似的对象组合起来。
    主要流程:
            1.创建对象
            2.在对象中设置用来存放下一级相似对象的数据结构。
            3.在对象中设置增删改查等功能。
    注意:这种模式和数据结构中的树形结构相似

 

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Employee
{
private:
    string name;
    string dept;
    string salary;
    vector<Employee*> subordinates;

public:
        Employee(){}
        Employee(string name,string dept,string salary):name(name),dept(dept),salary(salary)
        {
            this->subordinates = vector<Employee*>();
        }

        void add(Employee* e)
        {
            this->subordinates.push_back(e);
        }
        void removeSub(Employee *e)
        {
            vector<Employee*>::iterator it;
            for (it = subordinates.begin(); it != subordinates.end(); ++it)
            {
                if (e->getName() == (*it)->getName())
                {
                    subordinates.erase(it);
                    break;
                }
            }
        }
        vector<Employee*> getSubordinates()
        {
            return subordinates;
        }
        string getName()
        {
            return name;
        }
        string tostring()
        {
            return "Employee :[ Name : " + name + ", dept : " + dept + ", salary : "+ salary + " ]";
        }
};

int main()
{
    Employee * CEO = new Employee("ll","CEO","30000");
    Employee *headSales = new Employee("aa","Head Sales","20000");
    Employee *headMarketing = new Employee("Michel","Head Marketing", "20000");

    Employee *clerk1 = new Employee("Laura","Marketing", "10000");
    Employee *clerk2 = new Employee("Bob","Marketing", "10000");

    Employee *salesExecutive1 = new Employee("Richard","Sales", "10000");
    Employee *salesExecutive2 = new Employee("Rob","Sales", "10000");
    Employee *salesExecutive3 = new Employee("Rob2","Sales", "10000");

    CEO->add(headSales);
    CEO->add(headMarketing);

    headSales->add(salesExecutive1);
    headSales->add(salesExecutive2);
    headSales->add(salesExecutive3);

    headMarketing->add(clerk1);
    headMarketing->add(clerk2);

    cout<<CEO->tostring()<<endl;
    for (size_t i = 0; i < CEO->getSubordinates().size() ;++i)
    {
        Employee * emp = CEO->getSubordinates().at(i);
        cout<<emp->tostring()<<endl;
        vector<Employee*> emp1 = emp->getSubordinates();
        for (size_t i = 0; i < emp1.size() ;++i)
        {
            cout<<emp1.at(i)->tostring()<<endl;
        }
    }

    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设计模式--组合模式 的相关文章

  • Spring源码学习之BeanDefinition源码解析

    本文作者 磊叔 GLMapper本文链接 https juejin cn post 6844903553820000269 Bean的定义主要由BeanDefinition来描述的 作为Spring中用于包装Bean的数据结构 今天就来看看
  • python语法(高阶)-设计模式(单例模式)

    参考内容 黑马程序员
  • 行为型模式-策略模式

    package per mjn pattern strategy 抽象策略类 public interface Strategy void show package per mjn pattern strategy 具体策略类 用来封装算法
  • 离散仿真引擎基础作业与练习

    作业内容 一 简答题 1 解释 GameObjects 和 Assets 的区别与联系 2 下载几个游戏案例 分别总结资源 对象组织的结构 3 使用 debug 验证 MonoBehaviour 基本行为或事件触发条件 4 了解 GameO
  • 设计模式——原型模式

    原型模式顾名思义 就是指以某个实例为原型 copy出一个新的实例 该实例属性与原型相同或者是类似 很多时候 我们需要创建大量的相同或者相似的对象 如果一个个用new 构造函数的形式去创建的话比较繁琐 就像孙悟空要想变出成千上万个猴子猴孙总不
  • Java设计模式:装饰者模式(Decorator Pattern)

    装饰者模式 涉及的重要设计原则 类应该对扩展开放 对修改关闭 装饰者模式定义 装饰者模式动态地将责任附加到对象上 若要扩展功能 装饰者提供了比继承更有弹性的替代方案 UML类图 装饰者模式事例 咖啡店 咖啡种类 1 深焙咖啡 DarkRoa
  • 简单工厂模式

    简单工厂模式 一 概念 从设计模式的类型上来说 简单工厂模式是属于创建型模式 又叫做静态工厂方法 StaticFactory Method 模式 但不属于23种GOF设计模式之一 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例 简
  • Java设计模式-装饰者模式Decorator

    介绍 装饰者模式的核心思想是通过创建一个装饰对象 即装饰者 动态扩展目标对象的功能 并且不会改变目标对象的结构 提供了一种比继承更灵活的替代方案 需要注意的是 装饰对象要与目标对象实现相同的接口 或继承相同的抽象类 另外装饰对象需要持有目标
  • C++设计模式-State状态模式

    State状态模式作用 当一个对象的内在状态改变时允许改变其行为 这个对象看起来像是改变了其类 UML图如下 State类 抽象状态类 定义一个接口以封装与Context的一个特定状态相关的行为 ConcreteState类 具体状态 每一
  • 设计模式——导论

    作为软件开发人员 我们在平时工作的过程中 往往需要编写很多的代码来实现我们的需求 很多的时候会造成代码臃肿和代码冗余的情况 这个时候我们需要引入一个理念 设计模式 设计模式存在的意义在于 1 使得我们的代码更加精炼 2 使我们代码的可读性更
  • Java 多线程模式 —— Guarded Suspension 模式

    Part1Guarded Suspension 模式的介绍 我们只从字面上看 Guarded Suspension 是受保护暂停的意思 1Guarded Suspension 模式 在实际的并发编程中 Guarded Suspension
  • 设计模式(5)-适配器模式(Adapter Pattern)

    适配器模式 Adapter Pattern 顾名思义 就像变压器 转接头差不多 就像美国的生活电压是110V 中国是220V 就需要一个变压器将220V转换成110V 或者一个Type C接口想插如USB接口的东西 你就需要一个转换器 而这
  • linux内核中的设计模式

    创建型 Object Pool Object Pool模式可以提升性能 尤其是在对象的分配 初始化成本高 使用频率高 但使用时间短的情况下 对象池可以设置对象池的大小和回收时间缓存预分配的对象 NT和Linux都有简单的预分配缓存对象的机制
  • 单例模式的八种写法比较

    单例模式是最常用到的设计模式之一 熟悉设计模式的朋友对单例模式都不会陌生 一般介绍单例模式的书籍都会提到 饿汉式 和 懒汉式 这两种实现方式 但是除了这两种方式 本文还会介绍其他几种实现单例的方式 让我们来一起看看吧 简介 单例模式是一种常
  • Java设计模式之装饰者设计模式Decorator Pattern

    目录 一 基本概念 二 结构 1 图示 三 案例演示 被装饰对象的基类 一个接口 有cost 和description 两个抽象方法 具体被装饰的对象 实现上面这个接口 装饰者抽象类 基类 实现drink接口 具体的装饰者类 糖 具体装饰者
  • Java监听器与观察者模式

    Java监听器与观察者模式 Java中的监听器 Listener 和观察者模式 Observer Pattern 都是用于处理对象间的事件通知和响应的设计模式 它们的目的是在对象之间建立一种松散的耦合 使得一个对象的状态变化可以通知到其他对
  • 设计模式—迭代器模式解析

    本文参考学习了 图解设计模式 中的代码实现和原理解释 迭代器模式 简介 Iterator 模式用于在数据集合中按照顺序遍历集合 就类似于我们的循环 一个个去遍历一个集合中的所有元素 示例代码 首先我们思考一个书本和书架的关系 显然 书架可以
  • 谁能想到Java多线程设计模式竟然能被图解,大佬就是大佬,太牛了

    设计模式 Design pattern 代表了最佳的实践 通常被有经验的面向对象的软件开发人员所采用 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案 这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的
  • 设计模式(3)--对象结构(5)--外观

    1 意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口 这个接口使得 这一子系统更加容易使用 2 两种角色 子系统 Subsystem 外观 Facade 3 优点 3 1 对客户屏蔽了子系统组件 减少了客户处
  • 2023 年精选:每个 DevOps 团队都应该了解的 5 种微服务设计模式

    微服务彻底改变了应用程序开发世界 将大型整体系统分解为更小 更易于管理的组件 这种架构风格的特点是独立 松散耦合的服务 带来了从可扩展性 模块化到更高的灵活性等众多优势 DevOps 团队如何最好地利用这种方法来实现最高效率 答案在于理解并

随机推荐

  • 循环单链表(C语言版)

    前言 小可爱们 本次一起来看看循环单链表吧 嘻嘻 一 循环单链表的定义 循环单链表是单链表的另一种形式 其结构特点链表中最后一个结点的指针域不再是结束标记 而是指向整个链表的第一个结点 从而使链表形成一个环 和单链表相同 循环链表也有带头结
  • 量化涌现:信息论方法识别多变量数据中的因果涌现

    来源 集智俱乐部 作者 Fernando E Rosas Pedro A M Mediano Henrik J Jensen等 译者 潘佳栋 审校 梁金 编辑 邓一雪 导语 大量个体聚集起来 常常涌现出新的复杂结构 鸟儿聚集起来形成兼具灵活
  • vue-cli 添加顶部导航栏及点击导航菜单,左侧菜单栏切换

    layout 模板包含菜单栏等主要框架 router 路由管理 根据路由可生成左侧菜单栏 When your routing table is too long you can split it into small modules imp
  • 迈向多模态AGI之开放世界目标检测

    作者 王斌 谢春宇 冷大炜 责编 夏萌 出品 360人工智能研究院 引言 目标检测是计算机视觉中的一个非常重要的基础任务 与常见的的图像分类 识别任务不同 目标检测需要模型在给出目标的类别之上 进一步给出目标的位置和大小信息 在 CV三大任
  • 【腾宇】postinstall-postinstall配合patch-package重写node_modules的依赖方法

    1 本地安装依赖 postinstall postinstall patch package npm i patch package postinstall postinstall save dev or yarn add patch pa
  • Python使用pandas从mysql数据库读取数据并导出到Excel

    工作中我们经常会从数据库中提取数据 处理之后 将结果整理为excel输出 本文主要介绍使用python的pandas工具从mysql数据获取数据 按要求处理之后 导出到excel文件 安装依赖 首先确定已经安装PyMySQL pandas
  • 算法高级(23)-彩虹表(Rainbow Table)

    一 彩虹表的定义 百度百科 彩虹表是一个用于加密散列函数逆运算的预先计算好的表 为破解密码的散列值 或称哈希值 微缩图 摘要 指纹 哈希密文 而准备 一般主流的彩虹表都在100G以上 这样的表常常用于恢复由有限集字符组成的固定长度的纯文本密
  • Python-test 2021.11.1

    1 val for val in b1 if val in b2 列表的交集与差集 b1 1 2 3 b2 2 3 4 b3 val for val in b1 if val in b2 b4 val for val in b1 if va
  • pandas列值根据字典批量替换

    更多 更及时内容欢迎留意微信公众号 小窗幽记机器学习 背景 DataFrame数据中一列的值需要根据某个字典批量映射为字典中的value 方法1 pandas中的df replace import pandas as pd import n
  • 1204: 鸡兔同笼

    1204 鸡兔同笼 时间限制 1 Sec 内存限制 128 MB 提交 188 解决 77 提交 状态 讨论版
  • 物理层(比特流)

    物理层 一 物理层的基本概念 二 数据通信的基础知识 1 数据通信系统的模型 2 有关信道的几个基本概念 3 信道的极限容量 4 信道的极限信息传输速率 三 物理层下面的传输媒体 1 导引型传输媒体 2 非导引型传输媒体 四 信道复用技术
  • 借力亚马逊云科技实现 Apache APISIX 的生态探索与产品成长

    关于 Apache APISIX Apache APISIX 于 2019 年被两位创始人捐赠给 Apache 软件基金会孵化器 并于第二年7月从孵化器毕业 成为 Apache 顶级项目 APISIX 作为开源 API 网关 一直以活跃和快
  • osgFBO(十二)深度纹理与颜色纹理混合

    前面涉及到了深度纹理和颜色纹理 由于qedl中 也要两者混合 所以 要考虑到两者混合 这里只是简单将其相加 一 设置纹理 采样颜色纹理 osg ref ptrosg Texture2D texColor createFloatRectang
  • SQLServer用SQL语句给字段设置约束

    第二次写博客 比第一次写起来顺手些了 文章目录 SQL server数据库的基础学习2 一 用SQL语句给字段设置约束 设置check约束 设置default约束 设置unique约束 SQL server数据库的基础学习2 一 用SQL语
  • BURP安装Turbo Intruder插件报错问题

    项目场景 看别人文章时 发现一款神仙插件Turbo Intruder 准备安装下来 先是在BURP商店安装 发现不能用 使用时报错 然后去github把源码下载下来安装 问题描述 安装后 准备使用它自带的脚本跑一下 发现报错 查看日志发现是
  • kubernetes报错Error from server (AlreadyExists): error when creating "kubernetes-dashboard.yaml": serv

    在执行 kubectl apply f kubernetes dashboard yaml 报错 Error from server AlreadyExists error when creating kubernetes dashboar
  • SonarQube集成golang检测(10)

    sonar集成golang的检测工具 sonar中的插件SonarGo自带一些检测规则 但sonar想要集成golang的覆盖率 单元测试报告 和更多的代码规则 需要集成其他golang的检测工具 单元测试 通过golang的单元测试工具g
  • mysql8.0以上初始化以及忘记密码的方法

    Mysql8 0以上忘记初始密码时重置的方法 摘要 第一步 关闭Mysql服务 第二步 跳过Mysql密码验证 第三步 无密码方式进入Mysql 第四步 将登陆密码设置为空 第五步 更改自己的登陆密码 最后一步 验证密码是否修改成功 摘要
  • 网络收集的逻辑思维题

    一个有意思的逻辑训练题目 题目如下 有两个大于1小于100的自然数x y 老师告诉小明两个数的和 告诉小强两个数的积 已知小明和小强足够聪明 下面是两个人的对话 小强 我不知道这两个数是多少 lt 沉默中 gt 小明 我知道你不知道 我不知
  • 设计模式--组合模式

    组合模式 又叫部分整体模式 属于结构型模式 基本原理 以树形的结构将相似的对象组合起来 主要流程 1 创建对象 2 在对象中设置用来存放下一级相似对象的数据结构 3 在对象中设置增删改查等功能 注意 这种模式和数据结构中的树形结构相似 in