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

龙港 网站建设青海建设网站价格低

龙港 网站建设,青海建设网站价格低,手机可填写简历模板免费,如何设定旅游网站seo核心关键词组合设计模式 🚩什么是组合设计模式?🚩组合设计模式的特点🚩组合设计模式的结构🚩组合设计模式的优缺点🚩组合设计模式的Java实现🚩代码总结🚩总结 🚩什么是组合设计模式…

组合设计模式

  • 🚩什么是组合设计模式?
  • 🚩组合设计模式的特点
  • 🚩组合设计模式的结构
  • 🚩组合设计模式的优缺点
  • 🚩组合设计模式的Java实现
  • 🚩代码总结
  • 🚩总结

🚩什么是组合设计模式?

组合设计模式(Composite Pattern) 是一种 结构型设计模式,它允许你将对象组合成 树形结构 以表示 部分-整体 的层次结构。组合模式使得客户端可以 统一处理单个对象和组合对象,无需关心它们的具体类型。

使用场景

  • 当需要表示 部分-整体 的层次结构时,例如 文件系统菜单组织结构 等。

  • 当希望客户端能够 统一处理单个对象和组合对象 时。

  • 当需要 递归地处理树形结构 时。

🚩组合设计模式的特点

  • 统一性:组合模式使得客户端可以统一处理单个对象和组合对象。

  • 递归性:组合模式支持递归地处理树形结构。

  • 灵活性:可以动态地添加或删除组合对象中的子对象。

  • 透明性:客户端无需知道处理的是单个对象还是组合对象。

🚩组合设计模式的结构

组合模式主要包含以下部分:

  • Component(抽象组件):定义所有组件的通用接口,包括 叶子节点容器节点

  • Leaf(叶子节点):表示树形结构中的叶子节点,没有子节点,类似于文件。

  • Composite(容器节点):表示树形结构中的容器节点,可以包含子节点,类似于文件夹。

  • Client(客户端):通过 Component 接口操作组合对象。

图例:

在这里插入图片描述

🚩组合设计模式的优缺点

✅ 优点

  • 统一性:客户端可以统一处理单个对象和组合对象。

  • 灵活性:可以动态地添加或删除组合对象中的子对象。

  • 递归性:支持递归地处理树形结构。

  • 透明性:客户端无需知道处理的是单个对象还是组合对象。

❌ 缺点

  • 设计复杂性:组合模式的设计可能较为复杂,尤其是处理递归结构时。

  • 性能问题:在处理深层嵌套的树形结构时,可能会影响性能。

🚩组合设计模式的Java实现

代码地址:GitHub

  • 创建 抽象组件 AbstractFile,定义所有组件的通用接口。
/*** @author hanson.huang* @version V1.0* @ClassName AbstractFile* @Description 抽象组件,定义所有组件的通用接口* @date 2025/3/24 14:49**/
public abstract class AbstractFile {protected String name;public void printName() {System.out.println(name);}public abstract boolean Add(AbstractFile file);public abstract boolean Remove(AbstractFile file);public abstract List<AbstractFile> getChildren();
}
  • 创建 叶子节点 File,表示树形结构中的叶子节点,类比文件系统中的文件。
/*** @author hanson.huang* @version V1.0* @ClassName File* @Description 创建 叶子节点 File,表示树形结构中的叶子节点* @date 2025/3/24 14:50**/
public class File extends AbstractFile {public File(String name) {this.name = name;}@Overridepublic boolean Add(AbstractFile file) {return false;}@Overridepublic boolean Remove(AbstractFile file) {return false;}@Overridepublic List<AbstractFile> getChildren() {return null;}
}
  • 创建 容器节点 Folder,表示树形结构中的容器节点,类比文件系统中的文件夹。
/*** @author hanson.huang* @version V1.0* @ClassName Folder* @Description 创建 容器节点 Folder,表示树形结构中的容器节点* @date 2025/3/24 14:51**/
public class Folder extends AbstractFile {private List<AbstractFile> childrenList = new ArrayList<AbstractFile>();public Folder(String name) {this.name = name;}@Overridepublic boolean Add(AbstractFile file) {return childrenList.add(file);}@Overridepublic boolean Remove(AbstractFile file) {return childrenList.remove(file);}@Overridepublic List<AbstractFile> getChildren() {return childrenList;}
}
  • 测试组合模式
/*** @author hanson.huang* @version V1.0* @ClassName CompositePattern* @Description 测试组合模式* @date 2025/3/24 14:53**/
public class CompositePattern {public static void main(String[] args) {AbstractFile root = new Folder("root");AbstractFile folderA = new Folder("folderA");AbstractFile folderB = new Folder("folderB");AbstractFile  fileC = new File("fileC");AbstractFile  fileD = new File("fileD");AbstractFile  fileE = new File("fileE");root.Add(folderA);root.Add(folderB);root.Add(fileC);folderA.Add(fileD);folderA.Add(fileE);print(root);}public static void print(AbstractFile file) {file.printName();List<AbstractFile> childrenList = file.getChildren();if (childrenList == null) return;for (AbstractFile children : childrenList) {print(children);}}
}

📌 运行结果

在这里插入图片描述

🚩代码总结

  • 抽象组件 AbstractFile 定义所有组件的通用接口。

  • 叶子节点 File 表示树形结构中的叶子节点。

  • 容器节点 Folder 表示树形结构中的容器节点。

  • 客户端 通过递归方式遍历树形结构,并统一处理单个对象和组合对象。

🚩总结

  • 组合设计模式(Composite Pattern) 允许你将对象组合成 树形结构 以表示 部分-整体 的层次结构。

  • 适用于 文件系统菜单组织结构 等需要表示部分-整体层次结构的场景。

  • Java 实现 需要 定义抽象组件叶子节点容器节点,并通过递归方式处理树形结构。

✅ 适用场景:

  • 需要表示 部分-整体 的层次结构时。

  • 希望客户端能够 统一处理单个对象和组合对象 时。

  • 需要 递归地处理树形结构 时。

在这里插入图片描述

http://www.dtcms.com/a/536643.html

相关文章:

  • 建设软件资源网站大学生网站开发总结报告
  • 代码随想录 701.二叉搜索树中的插入操作
  • 自定义监控大屏项目实现方案
  • h5游戏免费下载:HTML5拉杆子过关小游戏
  • 电商系统经典陷阱
  • 5.5类的主方法
  • 带后台的php网站模板营销推广是一种什么的促销方式
  • 神经网络进化史:从理论到变革
  • 系统集成项目管理工程师案例分析:整合管理高频考点精要
  • 快速达建网站怎么给餐饮店做网站
  • 国产化Excel开发组件Spire.XLS教程:使用Python将CSV转换为XML(处理现实数据问题)
  • 常用软件下载地址
  • 开网站做外贸东莞市阳光网
  • 面向光学引导热红外无人机图像超分辨率的引导解耦网络
  • Java医院管理系统HIS源码带小程序和安装教程
  • 自监督 YOLO:利用对比学习实现标签高效的目标检测
  • 快速排序(Quick Sort)详解与图解
  • NB-IOT(4) :从媒体接入到数据传输的全链路解析
  • 如何使用Advanced Installer打包C#程序生成安装程序
  • 做网站的开题报告怎么写云服务器
  • 产品公司网站建设方案模板美味的树莓派wordpress
  • Word VBA中的Collapse方法详解
  • 介绍一下Spring Cloud LoadBalancer
  • 写作网站排名南京专业网站优化公司
  • 今日印度股市最新行情与实时走势分析(截至2025年10月27日)
  • KingbaseES数据库操作指南(2):SQL语法从入门到精通
  • 介绍一个不错的新闻源汇总开源Github项目 BestBlogs
  • 第3章 运行时数据区概述及线程
  • 深入理解C语言函数栈帧:程序运行的底层密码
  • 谷歌网站怎么做外链站长工具端口查询