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

软考 组合设计模式

组合设计模式(Composite Pattern)是结构型设计模式之一,它的核心思想是将对象组合成树形结构来表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

主要概念:

  1. 组件(Component):定义一个接口,用于访问和操作所有的对象(包括叶子节点和组合节点)。

  2. 叶子节点(Leaf):表示树的叶子节点,没有子节点,继承组件接口并实现具体行为。

  3. 组合节点(Composite):表示树中的分支节点,可以包含叶子节点或者其他组合节点,同样继承组件接口并实现具体行为,同时还会提供对子节点的管理功能(例如添加、删除)。private List<OrganizationComponent> components = new ArrayList<>();                       public void addComponent(OrganizationComponent component) {
            components.add(component);
        } 

@Override
    public void showDetails() {
        System.out.println("Department: " + name);
        for (OrganizationComponent component : components) {
            component.showDetails();
        }
    }

适用场景:

  • 当需要表示对象的“部分-整体”层次结构时。

  • 客户端希望统一对待单个对象和组合对象时。

  • 需要在系统中处理树形结构的数据时,比如图形界面中树形结构的布局。

示例:

假设我们有一个组织结构的系统,包含员工(叶子节点)和部门(组合节点),每个部门下可能包含多个员工或子部门。

// 组件接口
interface OrganizationComponent {void showDetails();
}// 叶子节点(员工)
class Employee implements OrganizationComponent {private String name;public Employee(String name) {this.name = name;}@Overridepublic void showDetails() {System.out.println("Employee: " + name);}
}// 组合节点(部门)
class Department implements OrganizationComponent {private String name;private List<OrganizationComponent> components = new ArrayList<>();public Department(String name) {this.name = name;}public void addComponent(OrganizationComponent component) {components.add(component);}@Overridepublic void showDetails() {System.out.println("Department: " + name);for (OrganizationComponent component : components) {component.showDetails();}}
}使用
public class CompositePatternDemo {public static void main(String[] args) {OrganizationComponent emp1 = new Employee("Alice");OrganizationComponent emp2 = new Employee("Bob");Department dept1 = new Department("HR");dept1.addComponent(emp1);dept1.addComponent(emp2);OrganizationComponent emp3 = new Employee("Charlie");Department dept2 = new Department("Finance");dept2.addComponent(emp3);Department headOffice = new Department("Head Office");headOffice.addComponent(dept1);headOffice.addComponent(dept2);headOffice.showDetails(); // 打印整个组织结构}
}输出
public class CompositePatternDemo {public static void main(String[] args) {OrganizationComponent emp1 = new Employee("Alice");OrganizationComponent emp2 = new Employee("Bob");Department dept1 = new Department("HR");dept1.addComponent(emp1);dept1.addComponent(emp2);OrganizationComponent emp3 = new Employee("Charlie");Department dept2 = new Department("Finance");dept2.addComponent(emp3);Department headOffice = new Department("Head Office");headOffice.addComponent(dept1);headOffice.addComponent(dept2);headOffice.showDetails(); // 打印整个组织结构}
}

相关文章:

  • 数据可视化利器 - Grafana 与 Prometheus 联手打造监控仪表盘
  • 【闲聊篇】java好丰富!
  • grafana/loki-stack 设置日志保存时间及自动清理
  • 56 在standby待机打通uart调试的方法
  • 基于 Vue3 与 exceljs 实现自定义导出 Excel 模板
  • NV054NV057美光固态闪存NV059NV062
  • 经典密码学和现代密码学的结构及其主要区别(1)维吉尼亚密码—附py代码
  • 49 python Matplotlib之Pandas 数据可视化
  • 动态规划-740.删除并获取节点-力扣(LeetCode)
  • Trae+12306 MCP,10分钟搭建行程可视化助手
  • MDK的编译过程及文件类型全解
  • 同一无线网络下的设备IP地址是否相同?
  • FFTW图像处理入门
  • Jenkins 2.426.2配置“构建历史的显示名称,加上包名等信息“
  • 多路径传输(比如 MPTCP)控制实时突发
  • 通过上传使大模型读取并分析文件实战
  • FPGA高效验证工具Solidify 8.0:全面重构图形用户界面
  • 安全运营与威胁对抗体系
  • SmartSoftHelp 之 SQL Server 数据库安全备份与安全还原详解---深度优化版:SmartSoftHelp DeepCore XSuite
  • AtCoder Beginner Contest 406(ABCD)
  • 做个网站多少钱找谁做/seo搜索引擎官网
  • 网站开发合同知识产权/seo网站关键字优化
  • 鹤壁市淇滨区建设局网站/网站页面优化内容包括哪些
  • 网站主题推荐/seo包括哪些方面
  • 网站那个做的比较好/网站整站优化
  • 郑州专业做网站的公司/免费推广软件下载