// 公司类public abstract class Company { protected String name; public Company(String name) { this.name = name; } public abstract void Add(Company c); public abstract void Remove(Company c); public abstract void Display(int depth); public abstract void LineOfDuty(); // 履行职责}// 为组合中对象声明接口public abstract class Component { protected String name; public Component(String name){ this.name=name; }// 通常用Add和Rmove方法来提供增加或移除树叶或树枝功能 public abstract void Add(Component c); public abstract void Remove(Component c); public abstract void Display(int depth);}// 具体公司类,实现接口,树枝节点public class ConcreteCompany extends Company{ private ArrayList<Company> childern=new ArrayList<Company>(); public ConcreteCompany(String name) { super(name); } @Override public void Add(Company c) { childern.add(c); } @Override public void Remove(Company c) { childern.remove(c); } @Override public void Display(int depth) { String string=""; for (int i = 0; i <depth; i++) { string+="-"; } System.out.println(string+this.name);// 遍历下级节点 for (Company company : childern) { company.Display(depth+2); } }// 履行职责 @Override public void LineOfDuty() { for (Company company : childern) { company.LineOfDuty(); } }}// 财务部门public class FinanceDepartment extends Company { public FinanceDepartment(String name) { super(name); // TODO Auto-generated constructor stub } @Override public void Add(Company c) { // TODO Auto-generated method stub } @Override public void Remove(Company c) { // TODO Auto-generated method stub } @Override public void Display(int depth) { String string=""; for (int i = 0; i <depth; i++) { string+="-"; } System.out.println(string+name); } @Override public void LineOfDuty() { System.out.println(this.name+"公司财务收支管理"); }}// 人力部门public class HRDepartment extends Company { public HRDepartment(String name) { super(name); // TODO Auto-generated constructor stub } @Override public void Add(Company c) { // TODO Auto-generated method stub } @Override public void Remove(Company c) { // TODO Auto-generated method stub } @Override public void Display(int depth) { String string=""; for (int i = 0; i <depth; i++) { string+="-"; } System.out.println(string+name); } @Override public void LineOfDuty() { System.out.println(this.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); ConcreteCompany comp1 = new ConcreteCompany("南京办事处"); comp1.Add(new HRDepartment("南京办事处人力资源部")); comp1.Add(new FinanceDepartment("南京办事处财务部")); comp.Add(comp1); ConcreteCompany comp2 = new ConcreteCompany("杭州办事处"); comp2.Add(new HRDepartment("杭州办事处人力资源部")); comp2.Add(new FinanceDepartment("杭州办事处财务部")); comp.Add(comp2); root.Display(1); root.LineOfDuty(); }}