树结构
树:根->树枝->树叶
总公司->分公司->分公司各部门
根节点:总公司->总公司各部门
package structural; import java.util.ArrayList; import java.util.List; public class CompositeMain { public static void main(String[] args) { //根节点,及根节点相关内容 //总公司,及总公司所在部门 HCompany root = new HCompany("大米时代公司"); root.add(new LearnDepartment("总公司研发部门")); root.add(new DisciplineDepartment("总公司考核部门")); //树枝节点 HCompany branchC1 = new HCompany("衡水分公司"); branchC1.add(new LearnDepartment("衡水开发部")); branchC1.add(new DisciplineDepartment("衡水财政综合部门")); root.add(branchC1);//总公司中有分公司 //树枝节点 HCompany branchC2 = new HCompany("天水分公司"); branchC2.add(new LearnDepartment("天水培训部")); branchC2.add(new DisciplineDepartment("天水行政综合部门")); root.add(branchC2);//总公司中有分公司 System.out.println("=====组织架构图====="); root.display(1); System.out.println("====企业文化===="); root.learn(); } } //抽象构件 abstract class ZCompany{ protected String name; public ZCompany(String name){ this.name = name; } public abstract void add(ZCompany c); public abstract void remove(ZCompany c); public abstract void display(int deptno); public abstract void learn(); } //树叶构件 class LearnDepartment extends ZCompany{ public LearnDepartment(String name) { super(name); } @Override public void add(ZCompany c) {} @Override public void remove(ZCompany c) {} @Override public void display(int deptno) { System.out.println("学术部门:"+name+"->"+deptno); } @Override public void learn() { System.out.println("学习知识:"+name); } } //树叶构件 class DisciplineDepartment extends ZCompany{ public DisciplineDepartment(String name) { super(name); } @Override public void add(ZCompany c) {} @Override public void remove(ZCompany c) {} @Override public void display(int deptno) { System.out.println("纪律部门:"+name+"->"+deptno); } @Override public void learn() { System.out.println("学习纪律:"+name); } } //树叶结构没有行为能力(add和remove方法置空) //树枝结构 class HCompany extends ZCompany{ private List<ZCompany> list = new ArrayList<ZCompany>(); public HCompany(String name) { super(name); } @Override public void add(ZCompany c) { list.add(c); } @Override public void remove(ZCompany c) { list.remove(c); } @Override public void display(int deptno) { for (ZCompany zCompany : list) { zCompany.display(deptno); } } @Override public void learn() { for (ZCompany zCompany : list) { zCompany.learn(); } } }