Java 的组合模式(Composite Pattern)本身并不难,属于设计模式中比较好理解、也比较好用的一种。下面我从「难度感受、核心思想、示例代码、常见误区」几个角度给你讲清楚。
把“单个对象”和“对象组合”当成同一种东西来对待。
✅ 概念不难
✅ 代码结构简单
⚠️ 难点在于:什么时候该用,而不是怎么写
所以它属于:
入门容易,用好需要一点经验
组合模式解决的是:
树形结构问题
Component(抽象组件)
├── Leaf(叶子节点)
└── Composite(组合节点)
public interface Node {
void show();
}
public class File implements Node {
private String name;
public File(String name) {
this.name = name;
}
@Override
public void show() {
System.out.println("文件:" + name);
}
}
import java.util.ArrayList;
import java.util.List;
public class Directory implements Node {
private String name;
private List<Node> children = new ArrayList<>();
public Directory(String name) {
this.name = name;
}
public void add(Node node) {
children.add(node);
}
@Override
public void show() {
System.out.println("文件夹:" + name);
for (Node node : children) {
node.show();
}
}
}
public class Main {
public static void main(String[] args) {
File f1 = new File("a.txt");
File f2 = new File("b.txt");
Directory dir = new Directory("工作目录");
dir.add(f1);
dir.add(f2);
dir.show();
}
}
✅ 这就是组合模式
✅ 你不需要关心是文件还是文件夹
✅ 统一调用 show()
add())✅ 你有以下需求时:
| 场景 | 示例 |
|---|---|
| 文件系统 | 文件 / 文件夹 |
| 菜单系统 | 菜单 / 菜单项 |
| 组织架构 | 部门 / 员工 |
| UI 组件 | Panel / Button |
| 维度 | 难度 |
|---|---|
| 理解概念 | ⭐ |
| 写代码 | ⭐⭐ |
| 用得合适 | ⭐⭐⭐ |
| 设计抽象 | ⭐⭐⭐ |
如果你愿意,我可以:
你更想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。