将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
它使我们在树形结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
员工类
public abstract class Staff { //姓名 private String name; //职业 private String position; public Staff(String name,String position){ this.name=name; this.position=position; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } public void printStaffInfo(){ System.out.println(this.name+" "+this.position); } public void printEmployeesInfo(){}; public void add(Staff staff){}; }
管理者类
public class Manager extends Staff{ //手下员工 private ListstaffList=new ArrayList (); public Manager(String name, String position) { super(name, position); } @Override public void add(Staff staff) { staffList.add(staff); } @Override public void printEmployeesInfo() { for(Staff staff:this.staffList){ System.out.println(this.getName()+"的下属:"+staff.getName()+" "+staff.getPosition()); //迭代 staff.printEmployeesInfo(); } } }
普通员工类
public class Employee extends Staff{ public Employee(String name, String position) { super(name, position); } }
测试类
public class Demo { public static void main(String[] args) { Staff boss=new Manager("大老板", "CEO"); Staff financeManager=new Manager("张总", "财务部经理"); Staff personnelManager=new Manager("王总", "人事部经理"); Staff technicalManager=new Manager("陈总", "技术部经理"); Staff marketManager=new Manager("吴总", "市场部经理"); Staff deptAssistant=new Manager("王助理", "部门助理"); Staff deptManager1=new Manager("主管1", "技术主管"); Staff deptManager2=new Manager("主管2", "技术主管"); Staff softwareEngineer1=new Employee("张三", "软件工程师"); Staff softwareEngineer2=new Employee("李四", "软件工程师"); Staff softwareEngineer3=new Employee("王五", "软件工程师"); //为主管1添加员工 deptManager1.add(softwareEngineer1); deptManager1.add(softwareEngineer2); deptManager1.add(softwareEngineer3); //为陈中添加员工 technicalManager.add(deptAssistant); technicalManager.add(deptManager1); technicalManager.add(deptManager2); //为大老板添加员工 boss.add(financeManager); boss.add(personnelManager); boss.add(technicalManager); boss.add(marketManager); boss.printStaffInfo(); boss.printEmployeesInfo(); } }
测试结果
大老板 CEO 大老板的下属:张总 财务部经理 大老板的下属:王总 人事部经理 大老板的下属:陈总 技术部经理 陈总的下属:王助理 部门助理 陈总的下属:主管1 技术主管 主管1的下属:张三 软件工程师 主管1的下属:李四 软件工程师 主管1的下属:王五 软件工程师 陈总的下属:主管2 技术主管 大老板的下属:吴总 市场部经理