组合模式(Composite Pattern) 的核心设计思想是:
“将对象组织成树形结构,使客户端对单个对象和组合对象的使用具有一致性。”
“把‘单个对象’和‘一组对象’当成同一种东西来处理。”
在现实或系统中,经常存在这样的结构:
组合模式的目标是:
组合模式非常适合表示:
例如:
| 思想 | 说明 |
|---|---|
| 抽象统一 | 用统一接口描述“单个对象”和“组合对象” |
| 递归结构 | 组合对象可以包含自身 |
| 透明性 | 客户端无需判断对象类型 |
| 简化调用 | 对整体和个体的操作方式一致 |
定义 统一接口,可以是:
operation())interface Component {
void operation();
}
表示 单个对象,没有子节点:
class Leaf implements Component {
public void operation() {
System.out.println("叶子节点执行");
}
}
表示 组合对象,可以包含子组件:
class Composite implements Component {
private List<Component> children = new ArrayList<>();
public void add(Component c) {
children.add(c);
}
public void operation() {
for (Component c : children) {
c.operation();
}
}
}
Component leaf1 = new Leaf();
Component leaf2 = new Leaf();
Composite composite = new Composite();
composite.add(leaf1);
composite.add(leaf2);
composite.operation(); // 统一调用
✅ 客户端 不关心 是单个对象还是组合对象
✅ 调用方式完全一致
✅ 当你遇到以下情况:
if (isComposite) 判断组合模式的设计思想是:用统一的抽象,把“个体”和“整体”组织成树形结构,让客户端以一致的方式处理它们。
如果你愿意,我也可以用 真实业务案例(如菜单、权限树、组织架构) 或 UML 图 再帮你深入讲一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。