设计模式-组合模式

组合模式(Composite Pattern)
将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
它使我们在树形结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。


[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 技术主管
大老板的下属:吴总 市场部经理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值