组合模式(Composite Pattern) 在 Java 中主要用来处理“树形结构”或“部分—整体”关系,让单个对象和多个对象的使用方式一致。
下面用通俗的话解释它的作用和用途。
现实中很多东西是层级结构的,比如:
问题:
客户端代码要不要区分“单个对象”和“组合对象”?
如果没有组合模式:
if (是文件) {
文件.操作();
} else if (是文件夹) {
文件夹.操作();
}
代码又臭又长。
让“叶子节点”和“容器节点”实现同一个接口
客户端只管调用接口方法,不关心:
interface Node {
void operation();
}
class File implements Node {
public void operation() {
System.out.println("处理文件");
}
}
class Folder implements Node {
private List<Node> children = new ArrayList<>();
public void add(Node node) {
children.add(node);
}
public void operation() {
for (Node node : children) {
node.operation();
}
}
}
Node file1 = new File();
Node file2 = new File();
Folder folder = new Folder();
folder.add(file1);
folder.add(file2);
folder.operation(); // 统一调用
✅ 客户端完全不关心是文件还是文件夹
java.io.FileContainer 里放 Component✅ 客户端代码简洁
✅ 符合开闭原则
✅ 易于扩展新节点类型
✅ 天然支持递归结构
⚠ 不够“类型安全”
add()UnsupportedOperationException⚠ 设计不当会导致:
Java 组合模式的作用:
把“单个对象”和“对象集合”当作同一个东西来用,专门处理树形结构。
如果你愿意,我可以用**真实业务例子(比如权限树 / 菜单树)**给你写一个完整 Demo。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。