03-JAVA设计模式-组合模式
组合模式
什么是组合模式
组合模式(Composite Pattern)允许你将对象组合成树形结构以表示“部分-整体”的层次结构,使得客户端以统一的方式处理单个对象和对象的组合。组合模式让你可以将对象组合成树形结构,并且能像单独对象一样使用它们。
组合模式使用场景
把部分和整体的关系用树形结构来表示,从而是客户端可以使用统一的方式处理部分对象和整体对象。
组合模式核心
抽象构件(Component)角色:定义了叶子和容器构件的共同特点
叶子(Leaf)构件角色:无子节点
容器(Composite)构件角色:有容器特征,可以包含子节点

组合模式工作流程分析
- 组合模式为处理树形结构提供了完美的解决方案,描述了如何将容器和叶子进行递归组合,是的用户在使用是可以一致性的对待容器和叶子
- 当容器对象的指定方法被调用时,将遍历整个树形结构,寻找也抱恨这个方法的成员,并调用执行,其中使用了递归调用的机制对整个结构进行处理。
代码实现结构
Component.java
// 抽象构件
public interface Component {// 相同行为操作void operation();
}
Leaf.java
// 叶子
public class Leaf implements Component {@Overridepublic void operation() {System.out.println("叶子单独操作");}
}
Composite.java
import java.util.ArrayList;
import java.util.List;// 容器节点
public class Composite implements Component{// 作为容器存储子节点信息private List<Component> components = new ArrayList<>();public Composite(List<Component> components) {this.components = components;}public List<Component> getComponents() {return components;}public void setComponents(List<Component> components) {this.components = components;}@Overridepublic void operation() {System.out.println("容器构件操作");for (Component component : components) {// 递归执行叶子节点操作component.operation();}}
}
案例
模拟杀毒软件的架构设计
UML

实现代码
AbstractFile.java
// 抽象组件
public interface AbstractFile {// 杀毒功能void killVirus();
}
ImagesFile.java
// 图片类型文件
public class ImagesFile implements AbstractFile{private String name;public ImagesFile(String name) {this.name = name;}@Overridepublic void killVirus() {System.out.printf("图片类型文件-%s-进行扫毒%n",this.name);}
}
TxtFile.java
// 文本类型文件
public class TxtFile implements AbstractFile{private String name;public TxtFile(String name) {this.name = name;}@Overridepublic void killVirus() {System.out.printf("文本类型文件-%s-进行扫毒%n",this.name);}
}
VideoFile.java
// 视频类型文件
public class VideoFile implements AbstractFile{private String name;public VideoFile(String name) {this.name = name;}@Overridepublic void killVirus() {System.out.printf("视频类型文件-%s-进行扫毒%n",this.name);}
}
Floder.java
import java.util.ArrayList;
import java.util.List;// 容器构件:目录
public class Floder implements AbstractFile{private String name;// 子节点private List<AbstractFile> lists = new ArrayList<AbstractFile>();public Floder(String name, List<AbstractFile> lists) {this.name = name;this.lists = lists;}@Overridepublic void killVirus() {System.out.printf("扫描当前目录-%s%n",this.name);for(AbstractFile abstractFile : lists){abstractFile.killVirus();}}
}
TestClient.java
import java.util.ArrayList;
import java.util.List;public class TestClient {public static void main(String[] args) {AbstractFile file1 = new TxtFile("花无缺.TXT");AbstractFile file2 = new ImagesFile("花无缺.png");AbstractFile file3 = new ImagesFile("花无缺.avi");List<AbstractFile> list = new ArrayList<AbstractFile>();list.add(file1);list.add(file2);list.add(file3);Floder floder = new Floder("huawuque",list);AbstractFile file4 = new TxtFile("小鱼儿.TXT");AbstractFile file5 = new ImagesFile("小鱼儿.png");AbstractFile file6 = new ImagesFile("小鱼儿.avi");List<AbstractFile> list1 = new ArrayList<AbstractFile>();list1.add(file4);list1.add(file5);list1.add(file6);Floder floder2 = new Floder("xuaiyuer",list1);List<AbstractFile> list3 = new ArrayList<AbstractFile>();list3.add(floder);list3.add(floder2);Floder floder3 = new Floder("绝代双骄",list3);floder3.killVirus();}
}
执行结果

gitee源码
git clone https://gitee.com/dchh/JavaStudyWorkSpaces.git
相关文章:
03-JAVA设计模式-组合模式
组合模式 什么是组合模式 组合模式(Composite Pattern)允许你将对象组合成树形结构以表示“部分-整体”的层次结构,使得客户端以统一的方式处理单个对象和对象的组合。组合模式让你可以将对象组合成树形结构,并且能像单独对象一…...
C++发票识别、发票查验接口示例,您的“发票管理专家”
发票识别发票查验接口。当财务人员在进行发票的数字化管理时,仅需一键上传发票图片,翔云发票识别接口即可快速、精准对发票的全票面信息进行提取,翔云发票查验接口可根据识别接口提取的发票信息实时联网进行真伪查验。助财务工作者从发票海洋…...
【电控笔记6.2】拉式转换与转移函数
概要 laplace:单输入单输出,线性系统 laplace 传递函数 总结...
第十五届蓝桥杯题解-数字接龙
题意:经过所有格子,并且不能进行交叉,走的下一个格子必须是当前格子值1%k,输出路径最小的那一条(有8个方向,一会粘图) 思路:按照8个方向设置偏移量进行dfs,第一个到达终…...
【vue】绑定事件 v-on
v-on 简写: clickkeyupkeydownkeyup.wkeyup.ctrl.a <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...
【应用】SpringBoot-自动配置原理
前言 本文简要介绍SpringBoot的自动配置原理。 本文讲述的SpringBoot版本为:3.1.2。 前置知识 在看原理介绍之前,需要知道Import注解的作用: 可以导入Configuration注解的配置类、声明Bean注解的bean方法;可以导入ImportSele…...
中文编程入门(Lua5.4.6中文版)第十二章 Lua 协程 参考《愿神》游戏
在《愿神》的提瓦特大陆上,每一位冒险者都拥有自己的独特力量——“神之眼”,他们借助元素之力探索广袤的世界,解决谜题,战胜敌人。而在提瓦特的科技树中,存在着一项名为“协同程序”的高级秘术,它使冒险者…...
C++笔记之注册回调函数常见的5种情况对比
C++笔记之注册回调函数常见的5种情况对比 —— 2024-04-10 code review! 文章目录 C++笔记之注册回调函数常见的5种情况对比1.五种情况2.示例2.1. `RegisterCallback` 和 `Callback` 都是普通函数2.2. `RegisterCallback` 是成员函数,`Callback` 是普通函数2.3. `RegisterC…...
人工智能揭示矩阵乘法的新可能性
人工智能揭示矩阵乘法的新可能性 数学家酷爱漂亮的谜题。当你尝试找到最有效的方法时,即使像乘法矩阵(二维数字表)这样抽象的东西也会感觉像玩一场游戏。这有点像尝试用尽可能少的步骤解开魔方——具有挑战性,但也很诱人。除了魔方…...
实在智能携手长江新零售俱乐部:探秘实在Agent数字员工,开启零售品牌增长新篇章
近日,实在智能携手长江新零售俱乐部成功举办了“AIGC:数字员工助力零售品牌新增长”主题活动,成功吸引了二十余家企业中高层管理精英的踊跃参与。在此次活动中,与会者围绕零售业数字化转型的当前态势、面临的挑战及其重要性进行了…...
计算机科学与导论 第十七 十八章 计算理论,人工智能
文章预览: 计算理论17.1 引言17.2 简单语言17.3 图灵机邱奇 -图灵 论题 人工智能引言18.1.1 什么是人工智能18.1.2 智能体18.1.3 编程语言 18.2 知识的表示18.2.1 语义网18.2.2 框架18.2.3 谓词逻辑18.2.4 基于规则的系统 18.2 专家系统18.3 语言理解18.4 搜索18.5 …...
linux 设置定时任务---学习
1、设置定时任务 crontab -e 设置格式参考:【Linux】Linux crontab 命令定时任务设置_crontab 设置每天10:30执行-CSDN博客 测试过程: */1 * * * * /root/cronjob.sh 脚本内容: echo "hell0 cronjob" >> /root/test/hello.txt 实现…...
钡铼IOy系列模块深挖工业场景需求提供丰富多样的I/O解决方案
钡铼IOy系列模块以其灵活性和多样性,在工业场景中提供了丰富多样的I/O解决方案,满足了不同行业、不同应用场景的需求。以下是一些常见的工业场景需求及钡铼IOy系列模块提供的解决方案: 1. 工厂自动化 需求:工厂自动化需要对生产线…...
【刷题笔记】第三天
两道简单题 文章目录 [2923. 找到冠军 I](https://leetcode.cn/problems/find-champion-i/description/)[3095. 或值至少 K 的最短子数组 I](https://leetcode.cn/problems/shortest-subarray-with-or-at-least-k-i/description/) 2923. 找到冠军 I 方法1: 如果 i …...
开源模型应用落地-LangChain试炼-CPU调用QWen1.5(一)
一、前言 尽管现在的大语言模型已经非常强大,可以解决许多问题,但在处理复杂情况时,仍然需要进行多个步骤或整合不同的流程才能达到最终的目标。然而,现在可以利用langchain来使得模型的应用变得更加直接和简单。 通过langchain框…...
STM32-模数转化器
ADC(Analog-to-Digital Converter) 指模数转换器。是指将连续变化的模拟信号转换 为离散的数字信号的器件。 ADC相关参数说明: 分辨率: 分辨率以二进制(或十进制)数的位数来表示,一般有 8 位、10 位、12 位、16 位…...
算法刷题记录2
4.图 4.1.被围绕的区域 思路:图中只有与边界上联通的O才不算是被X包围。因此本题就是从边界上的O开始递归,找与边界O联通的O,并标记为#(代表已遍历),最后图中剩下的O就是:被X包围的O。图中所有…...
中国代工巨头旗下芯片公司遭网络攻击,千兆字节数据被泄露
近日,中国智能手机代工巨头闻泰科技旗下荷兰芯片制造商Nexperia发布声明,称其遭遇网络攻击,有未经授权的第三方访问了公司的 IT 服务器,目前已向相关部门报告了此次事件,并与网络安全专家合作开启调查。而据相关消息&a…...
【ARM 裸机】汇编 led 驱动之基本语法
我们要编写的是 ARM 汇编,编译使用的是 gcc 交叉编译器,所以要符合 GNU 语法。 1、汇编指令 汇编由一条条指令构成,ARM 不能直接访问存储器,比如 RAM 中的数据,I.MX6UL 中的寄存器就是 RAM 类型的,我们用…...
scala---基础核心知识(变量定义,数据类型,流程控制,方法定义,函数定义)
一、什么是scala Scala 是一种多范式的编程语言,其设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。 二、为什么要学习scala 1、优雅 2、速度快 3、能融合到hado…...
OpenRocket全栈实战手册:从仿真引擎到航天教育生态构建
OpenRocket全栈实战手册:从仿真引擎到航天教育生态构建 【免费下载链接】openrocket Model-rocketry aerodynamics and trajectory simulation software 项目地址: https://gitcode.com/GitHub_Trending/op/openrocket 价值定位:重新定义航天工程…...
零基础快速上手:免费开源H5编辑器h5maker完全指南
零基础快速上手:免费开源H5编辑器h5maker完全指南 【免费下载链接】h5maker h5编辑器类似maka、易企秀 账号/密码:admin 项目地址: https://gitcode.com/gh_mirrors/h5/h5maker 想要轻松制作专业级H5页面却苦于技术门槛?h5maker作为一…...
Claude Code 用了半年才发现,原来上下文烧没了自己根本不知道!
点击上方卡片关注我设置星标 学习更多AI出海知识用 Claude Code 最怕什么?不是它写错代码,那改改就好。最怕的是写着写着突然质量暴跌,前面说好的逻辑它不认了,该记住的上下文全忘了,然后你反应过来:上下文…...
开源动作捕捉新纪元:FreeMoCap低成本解决方案全解析
开源动作捕捉新纪元:FreeMoCap低成本解决方案全解析 【免费下载链接】freemocap Free Motion Capture for Everyone 💀✨ 项目地址: https://gitcode.com/GitHub_Trending/fr/freemocap 问题:动作捕捉技术的高门槛困境 在数字内容创作…...
C语言诞生秘史:从被逼出到首个编译器的坎坷之路
C语言,是运用C语言自身来进行编译的,这一情况听起来好似那鸡生蛋、蛋生鸡这般,但早年贝尔实验室的那帮人实则真就把它给做成了,并非依靠魔法做到的,而是被逼迫到那种程度才达成的。被逼出来的语言临近1970年的时候 &am…...
微信单向好友检测终极指南:如何一键找出并清理删除你的微信好友
微信单向好友检测终极指南:如何一键找出并清理删除你的微信好友 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFr…...
从镜像到实战:星图OpenClaw+Qwen3-32B完整链路
从镜像到实战:星图OpenClawQwen3-32B完整链路 1. 为什么选择OpenClawQwen3-32B组合 去年冬天,当我第一次尝试用AI自动化处理周报时,发现公有云方案总在数据隐私和功能定制上让我束手束脚。直到遇见星图平台的OpenClaw镜像与Qwen3-32B组合&a…...
告别混乱!用CANoe的arxml数据库高效管理车载网络信号(附Signal/PDU/Frame创建全流程)
告别混乱!用CANoe的arxml数据库高效管理车载网络信号(附Signal/PDU/Frame创建全流程) 当车载网络从简单的CAN总线发展到包含FlexRay、以太网等多协议混合架构时,工程师们面临的信号管理复杂度呈指数级增长。一个典型的域控制器项目…...
Connect to Oracle Database with JDBC Driver
1. Overview The Oracle Database is one of the most popular relational databases. In this tutorial, we’ll learn how to connect to an Oracle Database using a JDBC Driver. 2. The Database To get us started, we need a database. If we don’t have access to …...
Windows 下 Docker Desktop 安装教程及常用命令(2026 最新)
Windows 安装 Docker 核心是 Docker Desktop WSL2(推荐),家庭版 / 专业版通用,性能好、最稳定,下面是详细步骤。 一、系统与硬件要求 1. 1、系统版本 Windows 10 64 位:家庭 / 专业 / 企业 22H2&#x…...
