“组合模式”(Composite Pattern)是 Java 设计模式里结构型模式的一种,新手一开始容易被名字吓到,其实它解决的是一个非常常见的问题:
怎么用“同一套方式”来处理「单个对象」和「一组对象」?
下面我用通俗比喻 + 简单 Java 例子帮你快速懂。
你作为 CEO:
你不想区分“这是个人还是部门”,你只想要一句:
下达任务()
这就是组合模式要做的。
一句话:
把“叶子节点”和“容器节点”当成同一种东西来处理
它们实现同一个接口。
// 组件(抽象)
public interface Component {
void operation();
}
public class Employee implements Component {
private String name;
public Employee(String name) {
this.name = name;
}
@Override
public void operation() {
System.out.println(name + " 执行任务");
}
}
import java.util.ArrayList;
import java.util.List;
public class Department implements Component {
private List<Component> children = new ArrayList<>();
public void add(Component c) {
children.add(c);
}
@Override
public void operation() {
for (Component c : children) {
c.operation(); // 递归调用
}
}
}
public class Test {
public static void main(String[] args) {
Component e1 = new Employee("张三");
Component e2 = new Employee("李四");
Department dept = new Department();
dept.add(e1);
dept.add(e2);
// 不用关心是员工还是部门
dept.operation();
}
}
输出:
张三 执行任务
李四 执行任务
✅ 你调用的是同一个方法
而是为了:
✔ 树形结构
✔ 文件 / 文件夹
✔ 菜单 / 子菜单
✔ UI 组件
✔ 组织 / 权限结构
一句话:
“整体和部分是同一类东西”的时候
如果你愿意,我可以:
你想从哪一个继续?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。