//Component import java.util.*; abstract class Employer { private String name; public void setName(String name) { this.name = name; } public String getName() { return this.name; } public abstract void add(Employer employer); public abstract void delete(Employer employer); public List employers; public void printInfo() { System.out.println(name); } public List getEmployers() { return this.employers; } } //Leaf class Programmer extends Employer { public Programmer(String name) { setName(name); employers = null;//程序员, 表示没有下属了 } public void add(Employer employer) { } public void delete(Employer employer) { } } class ProcectAssistant extends Employer { public ProcectAssistant(String name) { setName(name); employers = null;//项目助理, 表示没有下属了 } public void add(Employer employer) { } public void delete(Employer employer) { } } //Composite class ProjectManager extends Employer { public ProjectManager(String name) { setName(name); employers = new ArrayList(); } public void add(Employer employer) { employers.add(employer); } public void delete(Employer employer) { employers.remove(employer); } } //Client public class DS08_Composite { public static void main(String[] args) { Employer pm = new ProjectManager("项目经理"); Employer pa = new ProcectAssistant("项目助理"); Employer programmer1 = new Programmer("程序员一"); Employer programmer2 = new Programmer("程序员二"); pm.add(pa);//为项目经理添加项目助理 pm.add(programmer2);//为项目经理添加程序员 //注意,这里如果不加<>里面的东西,竟然不能编译通过,这个是因为泛型编程 List ems = pm.getEmployers(); int emsCount = ems.size(); for(int i = 0; i