设计模式代码实战-组合模式

news2024/11/29 2:52:38

1、问题描述

小明所在的公司内部有多个部门,每个部门下可能有不同的子部门或者员工。
请你设计一个组合模式来管理这些部门和员工,实现对公司组织结构的统一操作。部门和员工都具有一个通用的接口,可以获取他们的名称以及展示公司组织结构。

输入示例
MyCompany
8
D HR
E HRManager
D Finance
E AccountantA
E AccountantB
D IT
E DeveloperA
E DeveloperB

输出示例
Company Structure:
MyCompany
HR
HRManager
Finance
AccountantA
AccountantB
IT
DeveloperA
DeveloperB

2、组合模式

它将对象组合成树状结构来表示“部分-整体”的层次关系。组合模式使得客户端可
以统⼀处理单个对象和对象的组合,⽽⽆需区分它们的具体类型。

类似树形结构,能够通过树形结构获取树中所有节点的信息。所有节点都有实现相同的接口
请添加图片描述

3、代码

import com.sun.java.accessibility.util.TopLevelWindowListener;

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String companyName=sc.nextLine();
        int number=Integer.parseInt(sc.nextLine());
        Company company=new Company(companyName);
        Department department=null;
        for(int i=0;i<number;i++){
          String s=sc.nextLine();
          String[] s1=s.split(" ");
          String a=s1[0];
          String b=s1[1];

          if(a.equals("D")){
                department=new Department(b);
                company.addDepartment(department);
          }else if(a.equals("E")){
                department.addEmployee(new Employee(b));
          }

        }
        company.Display(0);
    }
}

interface Component{
    void Display(int depth);
}

class Employee implements Component{
    private String name;
    public Employee(String name){
        this.name=name;
    }
    @Override
    public void Display(int depth) {
        for(int i=0;i<depth;i++){
            System.out.print("  ");
        }
        System.out.println(this.name);
    }
}

class Department implements  Component{
    List<Department> subDepartment;
    List<Employee> employees;
    String departmentName;
    public  Department(String name){
        subDepartment=new ArrayList<>();
        employees=new ArrayList<>();
        departmentName=name;
    }

    public void addEmployee(Employee e){
        employees.add(e);
    }

    public void addSubDepartment(Department d){
        subDepartment.add(d);
    }
    @Override
    public void Display(int depth) {
        for(int i=0;i<depth;i++){
            System.out.print("  ");
        }
        System.out.println(""+this.departmentName);
        if(!subDepartment.isEmpty()){
            for(int i=0;i<subDepartment.size();i++){
                subDepartment.get(i).Display(depth+1);
            }
        }
        if(!employees.isEmpty()){
            for(int i=0;i<employees.size();i++){
                employees.get(i).Display(depth+1);
            }
        }
    }
}

class Company implements Component{
    private String name;
    List<Department> departments;
    public Company(String name){
        this.name=name;
        departments=new ArrayList<>();
    }
    @Override
    public void Display(int depth) {
        System.out.println("Company Structure:");
        System.out.println(this.name);
        if(!departments.isEmpty()){
            for(int i=0;i<departments.size();i++){
                departments.get(i).Display(depth+1);
            }
        }
    }
    public void addDepartment(Department d){
        departments.add(d);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1599107.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习BOM

目录 前言: 1. BOM组成&#xff1a; 1.1Window 对象&#xff1a; 1.1Location 对象&#xff1a; 1.2Navigator 对象&#xff1a; 1.2.1 navigator 对象包含了关于浏览器的信息包括&#xff1a; 1.3History 对象&#xff1a; 1.4常用的history的方法和属性: 1.4Document…

氟化钙与盐酸反应

结论&#xff1a;可以反应 参考链接 为什么盐酸,硝酸不能溶解氟化钙呢?氢氟酸可是弱酸啊。。。_百度知道 (baidu.com)https://zhidao.baidu.com/question/421110040.html特此记录 anlog 2024年4月16日

中医圆运动规律

目录 人体圆运动营气在十二经脉的运行规律子午流注与圆运动升降结合图 人体圆运动 营气在十二经脉的运行规律 营气在脉中&#xff0c;卫气在脉外 这个顺序也是子午流注的顺序 子午流注与圆运动升降结合图

【论文阅读02】一种基于双通道的水下图像增强卷积神经网络

来源&#xff1a;海洋论坛▏一种基于双通道的水下图像增强卷积神经网络 当前不会的 一、背景&#xff1a; 水下图像增强方法包含有无水下成像模型的水下图像增强方法、基于水下成像模型的水下图像恢复方法、水下成像模型与深度学习相结合的方法以及完全采用深度学习的方…

数据结构与算法——22.哈希算法

这篇文章我们来讲一下哈希表中较为关键的部分——哈希算法 目录 1.哈希算法的介绍 2.hash算法的使用 2.1 Object.hashCode 2.2 String.hashCode 3.关于哈希表及哈希算法的一些思考 1.哈希算法的介绍 问题&#xff1a;什么是哈希算法&#xff1f;哈希算法有哪些&#xff…

【算法一则】做算法学数据结构 - 简化路径 - 【栈】

目录 题目栈代码题解 题目 给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 ‘/’ 开头&#xff09;&#xff0c;请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中&#xff0c;一个点&#xff08;.&#xff09;表…

兔C_Java集:Java 语言简介

文章目录 1. Java简介历史简介问&#xff1a;Oracle 为什么收购 SUN 公司关于三个分支语言特性&#xff1a; 2. JDK 的安装与配置安装的官网链接配置环境变量 3. 第一个Java程序4. 第一个程序解释关于类的定义 5. CLASSPATH命令自动配置CLASSPATH 与 JVM 的关系CLASSPATH 的手动…

OM3 与 OM4:主要区别和实际应用

OM3 和 OM4 都是激光优化的多模光纤&#xff0c;具有 50/125μm 光纤芯&#xff0c;专为满足 ISO 11801 标准而开发。它们在光纤连接器和应用场景上具有相似性&#xff0c;这往往会导致用户之间的混淆。这些光纤主要设计用于数据中心、局域网 &#xff08;LAN&#xff09; 和其…

500以内的不入耳运动耳机推荐,首推五大业内顶级优品

不入耳式运动耳机因其独特的佩戴方式和设计&#xff0c;能够在运动过程中保持对周围环境的警觉&#xff0c;避免因音乐沉浸而忽视潜在的安全隐患&#xff0c;同时它们还能有效减少对耳道的压迫&#xff0c;让运动更加舒适自在&#xff0c;接下来&#xff0c;就让我为大家推荐一…

MAC系统安装PHP、Java、Python、mysql、Composer等环境无权限问题的详细操作方法说明。

本篇文章主要讲解MAC系统安装PHP、Java、Python、mysql、Composer等环境无权限问题的详细操作方法说明。通过本篇文章你可以快速掌握brew安装相对应环境的能力。 作者&#xff1a;任聪聪 日期&#xff1a;2024年4月12日 一、brew介绍及安装说明 官网地址&#xff1a;https://b…

分布式数据库Polardb-X架构及特点

PolarDB-X架构 计算节点&#xff08;Compute Node&#xff0c;CN&#xff09;是系统的入口&#xff0c;采用无状态设计的sql引擎提供分布式路由和计算&#xff0c;包括SQL解析器、优化器、执行器等模块。负责数据分布式路由、计算及动态调度&#xff0c;负责分布式事务2PC协调…

VLAN Mapping原理描述

基本原理 路由器收到带Tag的数据报文后&#xff0c;根据配置的VLAN Mapping方式&#xff0c;决定替换外层Tag中的VLAN ID或优先级&#xff1b;然后进入MAC地址学习阶段&#xff0c;根据源MAC地址映射后的VLAN ID刷新MAC地址表项&#xff1b;根据目的MAC映射后VLAN ID查找MAC地…

【电控笔记2.3】速度回路+系统延迟

2.3.1速度回路pi控制器设计 pi伯德图近似设计(不考虑延时理想情况下) Tl:负载转矩 PI控制器的转折频率:Ki/Kp

用海豚调度器定时调度从Kafka到HDFS的kettle任务脚本

在实际项目中&#xff0c;从Kafka到HDFS的数据是每天自动生成一个文件&#xff0c;按日期区分。而且Kafka在不断生产数据&#xff0c;因此看看kettle是不是需要时刻运行&#xff1f;能不能按照每日自动生成数据文件&#xff1f; 为了测试实际项目中的海豚定时调度从Kafka到HDF…

Django中的定时任务与后台任务队列的实践【第164篇—Django】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在Web开发中&#xff0c;处理定时任务和后台任务队列是很常见的需求。Django作为一个功能强…

隐私保护?还是安全漏洞?邮箱分身双重身份及创建攻略解析!

很多人只知道微信、QQ等应用分身&#xff0c;对于邮箱分身并不是很了解。邮箱分身和他们的不同点在于我们直接在原有邮箱的基础上创立新的虚拟邮箱地址&#xff0c;并且密码一致&#xff0c;在我们需要运营多个社交媒体账号或者管理多个项目的情况下&#xff0c;邮箱分身是一个…

为什么物联网安全性引发了对身份盗窃的担忧?

物联网是连接互联网的设备和传感器的统称&#xff0c;它代表了一个新的技术时代。这种硬件利用了连接性、硬件、小型化、云计算、数据处理、集成等方面的进步&#xff0c;为消费者和企业带来了好处&#xff0c;同样的物联网方面的威胁也是不断的在增加。 物联网是连接互联网的设…

【面试经典 150 | 链表】分隔链表

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;模拟 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等内容进行回顾…

leetcode代码记录(全排列 II

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a; [[1,1,2], [1,2,1], [2,1…

C++ | Leetcode C++题解之第32题最长有效括号

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestValidParentheses(string s) {int left 0, right 0, maxlength 0;for (int i 0; i < s.length(); i) {if (s[i] () {left;} else {right;}if (left right) {maxlength max(maxlength, 2 * ri…