设计模式--组合模式

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(使用前将#替换为@)

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

  • Java复习-25-单例设计模式

    单例设计模式 目的 使用场景 在实际开发下 会存在一种情况 某一种类在程序的整个生命周期中 只需要实例化一次就足够了 例如 系统数据类 由于操作系统只有一个 因此在程序初始化时该类只需要实例化一次 之后的系统数据更改都是在这一个实例化对象中
  • Chain of Responsibility:责任链模式

    现有多个处理者 这些处理者可以处理不同的请求 这些处理者有等级关系 每个处理者都有更上级的处理者 对于最上级的处理者 可以没有上级 对于一个上级处理者 可以有多个下级处理者 客户端发出了一个请求 请求被传递给一个最下级处理者 而该处理者无法
  • 常用设计模式总结

    设计模式的相关知识 很多书籍和博客中都有详细总结 本文总结的目的 1 将自己学习到的设计模式的知识按照自己的逻辑重新总结 方便查看和记忆 2 方便让自己对设计模式中常用的知识有一个系统的认知 设计模式 话设计模式 书中提到 24 种设计模式
  • 设计模式-单一职责原则介绍与理解

    描述 一个类应该专注于实现一个功能 好处 便于代码复用 举例 俄罗斯方块游戏 首先可以想到的是游戏逻辑与界面的分离 也就是说逻辑一个类 界面部分一个类 这样做的好处就是我们可以复用游戏逻辑的代码 例如我们用java写了一个基于PC端的俄罗斯
  • 行为型模式-策略模式

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

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

    什么是装饰器模式 装饰器模式是一种结构型设计模式 实现了在不改变现有对象结构的的同时又拓展了新的功能 装饰器本质上是对现有对象的重新包装 同时装饰器又称为封装器 如何理解装饰器模式 以笔记本电脑为例 当我们购买了一台新笔记本电脑 但我们发现
  • Java设计模式-装饰者模式Decorator

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

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

    备忘录模式 Memento Pattern 保存一个对象的某个状态 以便在适当的时候恢复对象 备忘录模式属于行为型模式 github源码路径 https github com dangwei 90 Design Mode 此文件包含 mai
  • 设计模式——导论

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

    适配器类似于现实世界里面的插头 通过适配器 我们可以将分属于不同类的两种不同类型的数据整合起来 而不必去根据某一需要增加或者修改类里面的方法 Adapter mode和Proxymode的区别 Proxy的关注点是职能转移 通过引入Prox
  • 设计模式(十)装饰器模式

    装饰器模式是一种非常有用的结构型模式 它允许我们在不改变类的结果的情况下 为类添加新的功能 我们来举例说明一下 首先添加一组形状 它们都实现了形状接口 public interface Shape String getShape class
  • 设计模式之享元模式

    享元模式 就是共享技术 对于系统中存在大量相同的对象 把他们抽取成一个对象放在缓存中进行使用 这样可以大大节省系统资源 例如 围棋棋盘上有两种棋子 一个是黑子 一个是白子 如果在下棋的时候每下一个棋子就要new一个棋子对象 那么就会有大量的
  • 设计模式——State(状态)模式

    目录 前言 1 定义 2 适用性 3 结构 3 1 结构图 3 2 参与者 4 应用举例 4 1 State TcpState 4 2 Context TcpConnection 4 3 ConcreteState ListeningTcp
  • 泛型与反射机制在JDBC和Servlet编程中的实践

    写在前面 泛型与反射是java中的两种强大机制 可以很好的提高代码的灵活性和复用性 本篇文章向大家展现在JDBC和Servlet编程场景下反射和泛型技术的实践 通过灵活使用这两种机制打造 高度可复用的JDBC和Servlet代码 1 JDB
  • Java监听器与观察者模式

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

    一 为何需要组合模式 Composite 在代码设计中 有种情况是对象之间存在层次关系 即对象之间会存在父结点和子结点的关系 比如在文件管理系统中 所有文件和文件夹形成树状结构 文件夹目录里存在子文件夹和文件 文件夹属于枝结点 文件属于叶结
  • C++设计模式 #3策略模式(Strategy Method)

    动机 在软件构建过程中 某些对象使用的的算法可能多种多样 经常改变 如果将这些算法都写在类中 会使得类变得异常复杂 而且有时候支持不频繁使用的算法也是性能负担 如何在运行时根据需求透明地更改对象的算法 将算法和对象本身解耦 从而避免上述问题
  • 自动化测试面试题(附答案)

    1 自动化代码中 用到了哪些设计模式 单例设计模式 工厂模式 PO设计模式 数据驱动模式 面向接口编程设计模式 2 什么是断言 Assert 断言Assert用于在代码中验证实际结果是不是符合预期结果 如果测试用例执行失败会抛出异常并提供断

随机推荐

  • 循环单链表(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