import java.util.*;
// 抽象公司类
abstract class Company { // (1)
protected String name;
public Company(String name) {
this.name = name; // (2)
}
public abstract void Add(Company c); // 增加子节点
public abstract void Delete(Company c); // 删除子节点
public abstract void Display(int depth); // 显示结构
}
// 具体公司(组合节点)
class ConcreteCompany extends Company {
private List<Company> children = new ArrayList<Company>(); // (3) (4)
public ConcreteCompany(String name) {
super(name);
}
public void Add(Company c) {
children.add(c); // (5)
}
public void Delete(Company c) {
children.remove(c); // (6)
}
public void Display(int depth) {
System.out.println("-".repeat(depth) + name);
for (Company c : children) {
c.Display(depth + 2);
}
}
}
// HR部门(叶子节点)
class HRDepartment extends Company {
public HRDepartment(String name) {
super(name);
}
public void Add(Company c) {
// 叶子节点不能添加
}
public void Delete(Company c) {
// 叶子节点不能删除
}
public void Display(int depth) {
System.out.println("-".repeat(depth) + name);
}
}
// 财务部门(叶子节点)
class FinanceDepartment extends Company {
public FinanceDepartment(String name) {
super(name);
}
public void Add(Company c) {
// 叶子节点不能添加
}
public void Delete(Company c) {
// 叶子节点不能删除
}
public void Display(int depth) {
System.out.println("-".repeat(depth) + name);
}
}
// 测试类
public class Test {
public static void main(String[] args) {
ConcreteCompany root = new ConcreteCompany("北京总公司");
root.Add(new HRDepartment("总公司人力资源部"));
root.Add(new FinanceDepartment("总公司财务部"));
ConcreteCompany comp = new ConcreteCompany("上海分公司");
comp.Add(new HRDepartment("上海分公司人力资源部"));
comp.Add(new FinanceDepartment("上海分公司财务部"));
root.Add(comp); // (7)
ConcreteCompany comp1 = new ConcreteCompany("南京办事处");
comp1.Add(new HRDepartment("南京办事处人力资源部"));
comp1.Add(new FinanceDepartment("南京办事处财务部"));
comp.Add(comp1); // (8)
System.out.println("\n公司结构图:\n");
root.Display(1);
}
}
2010年下半年
最新推荐文章于 2025-11-21 16:15:28 发布
1万+

被折叠的 条评论
为什么被折叠?



