设计模式-组合模式

组合模式(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 技术主管
大老板的下属:吴总 市场部经理

你可能感兴趣的:(java,设计模式)