组合模式(Composite Pattern)
将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
它使我们在树形结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
[img]http://dl2.iteye.com/upload/attachment/0093/7323/49fdb134-45a6-3238-a836-dcb8d1c28e3f.png[/img]
员工类
管理者类
普通员工类
测试类
测试结果
将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
它使我们在树形结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
[img]http://dl2.iteye.com/upload/attachment/0093/7323/49fdb134-45a6-3238-a836-dcb8d1c28e3f.png[/img]
员工类
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);
}
@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 技术主管
大老板的下属:吴总 市场部经理