在 Java 中,组合模式(Composite Pattern) 属于结构型设计模式,用于把对象组合成树形结构来表示“部分—整体”的层次关系,使得用户对单个对象和组合对象的访问具有一致性。
下面用清晰示例 + 代码说明如何实现。
Component(抽象构件)
声明公共接口(可以是抽象类或接口)
Leaf(叶子节点)
叶子对象,没有子节点
Composite(容器节点)
包含子节点,管理子组件
公司 → 部门 → 员工
部门和员工都可以“显示信息”
// 抽象构件
public abstract class Component {
protected String name;
public Component(String name) {
this.name = name;
}
public abstract void show(int depth);
// 可选:添加/删除子节点
public void add(Component c) {
throw new UnsupportedOperationException();
}
public void remove(Component c) {
throw new UnsupportedOperationException();
}
}
// 叶子节点:员工
public class Employee extends Component {
public Employee(String name) {
super(name);
}
@Override
public void show(int depth) {
System.out.println(" ".repeat(depth) + "员工:" + name);
}
}
import java.util.ArrayList;
import java.util.List;
// 组合节点:部门
public class Department extends Component {
private List<Component> children = new ArrayList<>();
public Department(String name) {
super(name);
}
@Override
public void add(Component c) {
children.add(c);
}
@Override
public void remove(Component c) {
children.remove(c);
}
@Override
public void show(int depth) {
System.out.println(" ".repeat(depth) + "部门:" + name);
for (Component c : children) {
c.show(depth + 1);
}
}
}
public class Client {
public static void main(String[] args) {
Component emp1 = new Employee("张三");
Component emp2 = new Employee("李四");
Department dev = new Department("研发部");
dev.add(emp1);
dev.add(emp2);
Component emp3 = new Employee("王五");
Department hr = new Department("人事部");
hr.add(emp3);
Department company = new Department("总公司");
company.add(dev);
company.add(hr);
company.show(0);
}
}
部门:总公司
部门:研发部
员工:张三
员工:李四
部门:人事部
员工:王五
✅ 清晰地表达树形结构
✅ 客户端无需区分“单个对象”和“组合对象”
✅ 符合开闭原则
如果你愿意,我也可以给你:
需要哪一种?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。