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

组合模式深度解析:构建灵活树形结构的终极指南

一、组合模式:统一处理简单与复杂对象的艺术

1.1 什么是组合模式?

组合模式(Composite Pattern)是一种结构型设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次关系。核心思想是让客户端以统一的方式处理单个对象和组合对象,就像处理文件系统中的文件夹和文件:

  • 叶子节点:文件(无子节点)

  • 组合节点:文件夹(可包含文件或子文件夹)

  • 统一接口:都支持ls命令查看内容

1.2 模式结构UML图

二、文件系统模拟器实战案例 📂

2.1 传统实现的问题

// 硬编码类型判断的客户端代码
public void print(FileSystemNode node) {if (node instanceof File) {System.out.println("文件:" + node.getName());} else if (node instanceof Directory) {Directory dir = (Directory) node;System.out.println("目录:" + dir.getName());for (FileSystemNode child : dir.getChildren()) {print(child); // 递归调用}}
}

痛点:客户端需要区分对象类型,违反开闭原则

2.2 组合模式改造方案

步骤1:定义组件接口

public interface FileSystemComponent {void print(String prefix);default void add(FileSystemComponent component) {throw new UnsupportedOperationException();}default void remove(FileSystemComponent component) {throw new UnsupportedOperationException();}
}

步骤2:实现叶子节点

public class File implements FileSystemComponent {private St
http://www.xdnf.cn/news/3828.html

相关文章:

  • Spring AI 实战:第四章、Spring AI多模态之看图说话
  • 四、shell脚本--流程控制语句:指挥脚本“走哪条路”
  • C++ 建造者模式详解
  • 第13章:陈默再访海奥华
  • QT下根据深度信息计算物体尺寸并UI显示的简单方案
  • 【翻译、转载】MCP 核心架构
  • Docker 容器化部署
  • 信息系统监理师第二版教材模拟题第三组(含解析)
  • CSS定位详解
  • 【Linux系统】条件变量
  • Cona编译问题
  • Web网页布局
  • 赋予网页健壮的灵魂 —— TypeScript(下)
  • Circular Plot系列(五): circle plot展示单细胞互作
  • 电动调节V型球阀的作用:专为颗粒状含碱浆液介质打造的高效解决方案-耀圣
  • 第 14 届蓝桥杯 C++ 青少组省赛中 / 高级组真题解析
  • 开源项目:optimum-quanto库介绍
  • 全面掌握 Jetpack Compose 的 State 体系:核心用法与最佳实践
  • 动态规划(5)路径问题--剑指offer -珠宝的最大值
  • 7 微调 黑盒蒸馏 突破伦理限制
  • STM32外设-GPIO输入(仅数字)
  • [GESP202503 四级] 二阶矩阵c++
  • Spring AI 实战:第八章、Spring AI Tool Calling之与时俱进
  • Android Framework学习三:zygote剖析
  • 轻量化定时工具!Pt 极简界面 :定时备份 + 循环灵活关机
  • 基于springboot3+mybatis整合,使用mybatisPlus插件自动完成简单的 增删改查操作
  • LeetCode 热题 100 189. 轮转数组
  • 多语言笔记系列:Polyglot Notebooks 混合使用多语言并共享变量
  • 第三节:OpenCV 基础入门-安装与配置 OpenCV (Python/C++ 环境)
  • LeetCode 1128.等价多米诺骨牌对的数量:计数