在 Java 中,**组合模式(Composite Pattern)**属于结构型设计模式,核心思想是:将对象组合成树形结构,以表示“部分—整体”的层次关系,并且让用户对单个对象和组合对象的使用具有一致性。
下面从 适合场景、典型例子、不适合场景 三个方面说明。
当业务天然就是 父子关系、包含关系 时非常适合,例如:
✅ 特点:整体和部分的操作方式一致
你不想写大量 if (是文件) else if (是文件夹) 的判断逻辑。
组合模式解决的问题:
// 不用区分
component.operation();
而不是:
if (obj instanceof File) {
file.open();
} else if (obj instanceof Folder) {
folder.openAll();
}
例如:
组合模式天生支持递归。
比如:
新增节点类型成本低,调用方无感知。
interface FileSystemNode {
void show();
}
class File implements FileSystemNode {
public void show() {
System.out.println("文件");
}
}
class Folder implements FileSystemNode {
private List<FileSystemNode> children = new ArrayList<>();
public void add(FileSystemNode node) {
children.add(node);
}
public void show() {
for (FileSystemNode node : children) {
node.show();
}
}
}
调用:
FileSystemNode node = folder;
node.show(); // 无需关心是文件还是文件夹
❌ 节点类型差异巨大,无法统一接口
❌ 层级非常浅,直接用 List 更简单
❌ 对性能极度敏感(递归开销)
❌ 业务频繁变化结构关系
Java 组合模式适合:业务是树形结构,且希望“单个对象”和“组合对象”被一致对待的场景。
如果你愿意,我也可以:
你想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。