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

devtools/2024/11/9 16:46:12/

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;}@Overridepublic 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);}@Overridepublic 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<>();}@Overridepublic 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.ppmy.cn/devtools/1790.html

相关文章

通用航空机场系统架构:连接天空与大地的科技之桥

在现代航空业的背景下&#xff0c;通用航空机场系统架构的重要性愈发凸显。通用航空机场作为航空运输网络的重要组成部分&#xff0c;承担着连接各地区、支持经济发展和满足民众出行需求的重任。而其系统架构的设计与运作&#xff0c;直接影响着机场的安全性、效率性以及用户体…

【学习】VScode修改侧边栏大小。

侧边栏不可以直接更改&#xff0c;所以先缩放整体界面&#xff0c;再改变工作区大小。 缩放整体界面&#xff1a; Ctrl 或 Ctrl - 。 也可以直接使用如下代码&#xff1a; Ctrl Shifit p 打开搜索 settings &#xff0c;选择下图第一个。 然后嵌入如下代码&#xff1a…

【视频异常检测】Learning Multimodal Violence Detection under Weak Supervision 论文阅读

Not only Look, but also Listen: Learning Multimodal Violence Detection under Weak Supervision 论文阅读 Abstract1 Introduction2 Related Work3 XD-Violence Dataset3.1 Selecting Violence Categories3.2 Collection and AnnotationVideo annotation.3.3 Dataset Stati…

如何采集opc服务器数据上传云端

为了进一步提高生产效率&#xff0c;生产制造的不断朝着智能化发展和升级&#xff0c;传统的自动化生产系统已经不能满足需求。传统的SCADA系统一般是用于现场的数据采集与控制&#xff0c;但是本地控制已经无法满足整个工厂系统智能化数字化的需求&#xff0c;智能化数字化是需…

云原生数据库海山(He3DB)PostgreSQL版核心设计理念

本期深入解析云原生数据库海山PostgreSQL版&#xff08;以下简称“He3DB”&#xff09;的设计理念&#xff0c;探讨在设计云原生数据库过程中遇到的工程挑战&#xff0c;并展示He3DB如何有效地解决这些问题。 He3DB是移动云受到 Amazon Aurora 论文启发而独立自主设计的云原生数…

计算机网络(王道考研)笔记个人整理——第二章

第二章 物理层主要任务&#xff1a;确定与传输媒体有关的一些特性 机械特性&#xff1a;物理连接的特性 规定物理连接时所采用的规格、接口形状、引线数目、引脚数量和排列情况 电气特性 规定传输二进制位时&#xff0c;线路上信号的电压范围、阻抗匹配、传输速率和距离限制等…

【SpringBoot+VUE+ELEMENT 】前后端分离的管理系统的实现——基础功能(记录向)

一个前后端分离的实现。后端使用SpringBoot&#xff0c;前端使用Vue&#xff0c;后端标准的四层结构&#xff0c;前端是用的Element。 一、环境准备 1.安装node.js Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。 成功后cmd中运行 node -v npm -v 出现 对应的版本…

如何查看已使用的IP

如何查看已使用的IP 一、用cmd登录&#xff08;winr&#xff09; 二、用命令查看IP 在cmd命令窗口输入“ipconfig”命令&#xff0c;按下键盘上的回车键 这时会在cmd命令窗口看见自己电脑的IP地址&#xff0c;在命令窗里找到你的“以太网适配器 以太网”或者“无线局域网适配器…