设计模式-组合模式的理解

news/2025/1/11 6:51:17/

文章目录

    • 原理
    • 简单Demo

本文参考:

组合模式 | 菜鸟教程 (runoob.com)

组合模式(Composite Pattern),又叫部分整体模式,通过组合的方式(在对象内部引用对象)来进行布局,用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

原理

意图:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。

何时使用:1、您想表示对象的部分-整体层次结构(树形结构)。 2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

如何解决:树枝和叶子实现统一接口,树枝内部组合该接口。

关键代码:树枝内部组合该接口,并且含有内部属性 List,里面放 Component。

应用实例: 1、算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作数也可以是操作数、操作符和另一个操作数。 2、在 JAVA AWT 和 SWING 中,对于 Button 和 Checkbox 是树叶,Container 是树枝。

优点: 1、高层模块调用简单。 2、节点自由增加。

缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。

使用场景:部分、整体场景,如树形菜单,文件、文件夹的管理。

注意事项:定义时为具体类。

简单Demo

实现一个Employee类,里面通过组合的方式,有一个成员列表来表示其下的员工。

  1. 创建Employee类,其中有一个Employee对象的成员列表

    import java.util.ArrayList;
    import java.util.List;/*** @Author jiangxuzhao* @Description* @Date 2023/5/31*/
    public class Employee {private String name;private List<Employee> list;public Employee(String name){this.name=name;list=new ArrayList<>();}public void removeSubEmployee(Employee e){list.remove(e);}public void addSubEmployee(Employee e){list.add(e);}public void printSub(){ //递归打印其下的子节点System.out.println(name);for(Employee e:list){e.printSub();}}
    }
    
  2. 测试

    /*** @Author jiangxuzhao* @Description* @Date 2023/5/31*/
    public class CompositeTest {public static void main(String[] args) {Employee ceo = new Employee("CEO");Employee subCEO1 = new Employee("subCEO1");Employee subCEO2 = new Employee("subCEO2");Employee subCEO1_employee1 = new Employee("subCEO1_Employee1");Employee subCEO1_employee2 = new Employee("subCEO1_Employee2");Employee subCEO2_employee1 = new Employee("subCEO2_Employee1");Employee subCEO2_employee2 = new Employee("subCEO2_Employee2");ceo.addSubEmployee(subCEO1);ceo.addSubEmployee(subCEO2);subCEO1.addSubEmployee(subCEO1_employee1);subCEO1.addSubEmployee(subCEO1_employee2);subCEO2.addSubEmployee(subCEO2_employee1);subCEO2.addSubEmployee(subCEO2_employee2);ceo.printSub();}
    }
    

    输出:

    CEO
    subCEO1
    subCEO1_Employee1
    subCEO1_Employee2
    subCEO2
    subCEO2_Employee1
    subCEO2_Employee2
    

http://www.ppmy.cn/news/121855.html

相关文章

DC12V/24V 、AC24V 电源线防雷保护

防雷设计是保证电源系统可靠运行的必不可少的环节&#xff0c;对于设备而言&#xff0c;雷电过电压来源主要包括感应过电压、雷电侵入波和反击过电压。在一般情况下&#xff0c;通信电源必须采取系统防护、概率防护和多级防护的防雷原则。 1&#xff09;直流电源的防雷电路使用…

DC48V电源2KV防雷滤波电路EMC方案

DC48V电源2KV防雷滤波电路EMC方案 接口电路设计概述&#xff1a; 直流电源接口应用于直流输入输出接口DC48V。 本方案从EMC原理上&#xff0c;进行了相关的抑制干扰和抗敏感度的设计&#xff1b;同时兼容接口防雷设计&#xff1b;本方案防雷电路设计可通过IEC61000-4-5标准&am…

防雷知识:什么是雷电浪涌

浪涌是突然发生并超过典型工作电压的过电压。一般来说&#xff0c;浪涌是电路中短暂的电流、电压或功率波。今天我们就来科普一下什么是雷电浪涌。 什么是浪涌&#xff1f; 浪涌&#xff0c;顾名思义&#xff0c;是一种突然发生并超过典型工作电压的过电压。一般来说&#xf…

信号防雷器分类,信号电涌保护器,浪涌保护器科普

5G互联网高科技的发展也带动高新网络技术设备的发展&#xff0c;通过信号线和网络设备传输的感应雷击坏设备时有发生&#xff0c;人们越来越重视信号线和网络设备的防雷。本文重点介绍信号防雷器&#xff08;信号浪涌保护器&#xff0c;信号电涌保护器&#xff09;的分类知识。…

EMC防护--端口浪涌和防雷设计

在工作中&#xff0c;产品设计经常要考虑EMC设计&#xff0c;特别是端口防护&#xff0c;主要包括信号口、天馈口和电源口。其中信号口又分普通网口、POE网口、RS232/RS485、GPS数据网口。此类问题在大部分产品中均会遇到。 本文内容是根据本人多年从业经验和同事们的经验撰写…

网络信号防雷,网络防雷,计算机网络防雷解决方案

目前&#xff0c;随着我国信息化建设进程的加快&#xff0c;计算机网络信息系统正扮演着愈来愈重要的角色&#xff0c;每年都有多起因雷击造成计算机及网络通讯设施损坏&#xff0c;从而导致信息传输中断、信息受损乃至威胁人身安全的事故发生。 雷电侵害计算机网络有两种方式…

11种防雷器电路原理详解!

目录 一、交流电源防雷器 &#xff08;一&#xff09;单相并联式防雷器 &#xff08;三&#xff09;单相串联式防雷器 &#xff08;四&#xff09;三相串联式防雷器 二、通信机房用直流电源防雷器 &#xff08;一&#xff09;并联式直流电源防雷器 &#xff08;二&#x…

电源口防雷器电路设计方案

电源口防雷电路的设计需要注意的因素较多&#xff0c;有如下几方面&#xff1a; 1、防雷电路的设计应满足规定的防护等级要求&#xff0c;且防雷电路的残压水平应能够保护后级电路免受损坏。 2、在遇到雷电暂态过电压作用时&#xff0c;保护装置应具有足够快的动作响应速度&…