设计模式-组合模式

来源:互联网 发布:扫地机器人算法 编辑:程序博客网 时间:2024/06/06 04:13
组合模式(Composite Pattern)
    将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
    它使我们在树形结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。





员工类
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 List<Staff> staffList=new ArrayList<Staff>();public Manager(String name, String position) {super(name, position);}@Overridepublic void add(Staff staff) {staffList.add(staff);}@Overridepublic 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 技术主管大老板的下属:吴总 市场部经理