Java 的组合模式(Composite Pattern)本身并不难理解,属于 23 种设计模式里比较“直观”的一个。很多人觉得难,通常是因为:
下面我用一句话 + 一个例子帮你快速建立认知。
把“单个对象”和“对象集合”当成同一种东西来处理,形成树形结构,统一调用。
你希望:
folder.print();
不管是文件还是文件夹,都能“打印自己”。
interface Node {
void print();
}
class File implements Node {
private String name;
public File(String name) {
this.name = name;
}
@Override
public void print() {
System.out.println("文件:" + name);
}
}
class Folder implements Node {
private String name;
private List<Node> children = new ArrayList<>();
public Folder(String name) {
this.name = name;
}
public void add(Node node) {
children.add(node);
}
@Override
public void print() {
System.out.println("文件夹:" + name);
for (Node node : children) {
node.print(); // 递归
}
}
}
Folder root = new Folder("根目录");
root.add(new File("a.txt"));
root.add(new File("b.txt"));
Folder sub = new Folder("子目录");
sub.add(new File("c.txt"));
root.add(sub);
root.print();
✅ 你不需要关心是文件还是文件夹 ✅ 统一调用 print() ✅ 天然支持递归结构
常见卡点:
| 难点 | 说明 |
|---|---|
| 抽象层次 | 一开始不适应“文件和文件夹是同一类型” |
| 递归 | 组合模式常常配合递归使用 |
| 设计过度 | 实际项目里没必要硬套 |
✅ 树形结构
✅ 菜单 / 权限 / 组织结构 / UI 组件
✅ 希望“统一处理单个和组合对象”
如果你愿意,我可以:
你想从哪方面继续?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。