【Java】23种设计模式——8.组合模式
概念
组合模式(Composite Pattern)是一种结构型设计模式。合模式实际上就是将多个组件进行组合,让用户可以对它们进行一致性处理。
核心角色
| 角色 | 职责 | 示例场景 |
|---|---|---|
| Component(抽象组件) | 声明所有对象的通用接口(如操作方法) | FileSystemComponent |
| Leaf(叶子节点) | 实现 Component,表示无子节点的终结点 |
文件(File) |
| Composite(组合节点) | 实现 Component,管理子节点集合 |
文件夹(Directory) |
适用场景
- 层次化数据结构 : 文件系统、组织架构、UI组件树。
- 统一操作逻辑 : 需对整体和部分执行相同操作(渲染、统计)。
- 动态组合对象 : 运动时动态添加/移除子节点(菜单导航)。
使用
设计一个文件系统,支持文件和文件夹的统一操作。
-
抽象组件 (文件系统通用接口)
/** * 抽象组件 : 文件系统通用接口 * @Author:lyj * @Date:2025/5/6 11:08 */ public interface FileSystemComponent { /** * 显示文件 * @param index 文件层级 */ public void display(int index); } -
叶子节点 (文件)
/** * 叶子节点 : 文件 * @Author:lyj * @Date:2025/5/6 11:13 */ public class File implements FileSystemComponent{ private String name; // 文件名 public File(String name) { this.name = name; } @Override public void display(int index) { System.out.println(" ".repeat(index) + " \uD83D\uDCC4 " + name); } } -
组合节点 (文件夹)
/** * 叶子节点 : 文件 * @Author:lyj * @Date:2025/5/6 11:13 */ public class File implements FileSystemComponent{ private String name; // 文件名 public File(String name) { this.name = name; } @Override public void display(int index) { System.out.println(" ".repeat(index) + " \uD83D\uDCC4 " + name); } }运行测试如下:
// 创建子文件夹和文件 Directory dir1 = new Directory("学习"); dir1.add(new File("c++.txt")); dir1.add(new File("python.txt")); dir1.add(new File("java.txt")); File file1 = new File("java.txt"); // 创建文件和文件夹 Directory root = new Directory("E:"); root.add(dir1); root.add(file1); // 统一调用显示 root.display(0);运行文件显示如下:
![image]()
有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。


浙公网安备 33010602011771号