组合模式

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

适用性

1.你想表示对象的部分-整体层次结构。

2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构 中的所有对象。

参与者

1.Component
为组合中的对象声明接口。
在适当的情况下,实现所有类共有接口的缺省行为。
声明一个接口用于访问和管理 Component 的子组件。
(可选)在递归结构中定义一个接口,用于访问一个父部件,并在合适的情况 下实现它。

2.Leaf
在组合中表示叶节点对象,叶节点没有子节点。
在组合中定义节点对象的行为。

3.Composite
定义有子部件的些部件的行为。
存储子部件。
在 Component 接口中实现与子部件有关的操作。

4.Client
通过 Component 接口操纵组合部件的对象。

Component 

public abstract class Employer { 
 
    private String name;          

	public void setName(String name) {
	         this.name = name;     
	}          
	public String getName() {
	         return this.name;     
	}          
	public abstract void add(Employer employer);          
	public abstract void delete(Employer employer);          
	public List employers;          
	public void printInfo() {         
		System.out.println(name);     
	}          
	public List getEmployers() {
	    return this.employers;     
	 } 
}
Leaf  
 
public class Programmer extends Employer { 
 
    public Programmer(String name) {
             setName(name);         
             employers = null;//程序员, 表示没有下属了     
    } 
 
    public void add(Employer employer) {             

    } 
 
    public void delete(Employer employer) {             

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

    } 
 
    public void delete(Employer employer) {             
     
     } 
} 
Composite  
 
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(Emplo*er employer) {
             employers.remove(employer);     
    } 
}
Client  
 
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 ems = pm.getEmployers();         
             for (Employer em : ems) {
                   System.out.println(em.getName());         
              }     
     } 
 }
result  
 
项目助理 
程序员二
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值