JAVA系列-设计模式-组合模式

定义:

将对象组合成树形结构以表示"部分-整体"的层次结构。"Composite使得用户对单个对象和组合对的使用具有一致性。"


package Component;

import java.util.List;

public abstract class Employer {
	public List employers;
	private String name;

	public abstract void add(Employer employer);

	public abstract void delete(Employer employer);

	public List getEmployers() {
		return this.employers;
	}

	public String getName() {
		return this.name;
	}
	
	public void printInfo() {
		System.out.println(name);
	}

	public void setName(String name) {
		this.name = name;
	}
}

package Component;

import java.util.ArrayList;

public class ProjectManager extends Employer{
	public ProjectManager(String name) {
        setName(name);
        employers = new ArrayList();
    }
    
    public void add(Employer employer) {
        employers.add(employer);
    }

    public void delete(Employer employer) {
        employers.remove(employer);
    }
}

package Component;

/**
 * 项目助理
 * @author Administrator
 *
 */
public class ProjectAssistant extends Employer {

    public ProjectAssistant(String name) {
        setName(name);
        employers = null;//项目助理, 表示没有下属了
    }

    public void add(Employer employer) {
        
    }

    public void delete(Employer employer) {
        
    }
}

package Component;

public class Programmer extends Employer {

    public Programmer(String name) {
        setName(name);
        employers = null;//程序员, 表示没有下属了
    }

    public void add(Employer employer) {
        
    }

    public void delete(Employer employer) {
        
    }
}

package Component;

import java.util.List;

/**
 * 将对象组合成树形结构以表示"部分-整体"的层次结构。"
 * 
 * Composite使得用户对单个对象和组合对类的使用具有一致性。" 
 * 适用性 
 * 1.你想表示对象的部分-整体层次结构。
 * 2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
 * 
 * @author Administrator
 * 
 */
public class Test {
	public static void main(String[] args) {
		Employer pm = new ProjectManager("项目经理");
		Employer pa = new ProjectAssistant("项目助理");
		Employer programmer1 = new Programmer("程序员一");
		Employer programmer2 = new Programmer("程序员二");

		pm.add(pa);// 为项目经理添加项目助理
		pm.add(programmer2);// 为项目经理添加程序员

		List<Employer> ems = pm.getEmployers();
		for (Employer em : ems) {
			System.out.println(em.getName());
		}
	}
}

推荐文章
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值