设计模式-组合模式

组合模式(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);
	}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值