java 设计模式之: 组合模式(Composite)

//Component.java

package com.youngmaster.model.Composite;
/**
 * @author youngmaster 
 * @E-mail:[email protected]
 * @version eclipse 3.4
 * @create time:2009-9-13 上午03:24:55
 * 组件抽象角色 
 */

public interface Component {  
      
    public void run();  
  
}  

 

//Leaf.java

package com.youngmaster.model.Composite;

/**
 * @author youngmaster 
 * @E-mail:[email protected]
 * @version eclipse 3.4
 * @create time:2009-9-13 上午03:25:54
 * 叶子角色
 */

public class Leaf implements Component {

	public void run() {
		System.out.println(" run invoked...");
	}

}

 

//Composite.java

package com.youngmaster.model.Composite;

import java.util.ArrayList;
import java.util.List;

/**
 * @author youngmaster 
 * @E-mail:[email protected]
 * @version eclipse 3.4
 * @create time:2009-9-13 上午03:27:33
 * 
 *  组合角色 
 * 实现组件角色接口,并且添加,删除的也是组件角色 
 *  
 * Composite本来可以再包含Leaf和Composite的。而 Leaf和Composite 又都属于 Component,所以增加,删除 的是Component 
 *  
 * 组合模式主要分为2种 
 *  
 * 1 透明式 
 
 * 添加Component对象的操作定义在Component角色中,这样的话不仅Composite需要实现这些方法,Leaf也需要实现这些方法, 
 * 而这些方法对于Leaf来说没有任何意义,不过将系统实现统一起来了,因此对用户来说透明(用户无需区分Composite还是Leaf) 
 *   ,因为这些角色中都具备这些方法。 
     
 *2 安全式 
 
  *  添加Component对象的操作定义在Composite角色中,这样的话Leaf就无需实现这些方法(因为Leaf本身根本不需要实现这些方法) 
 */

public class Composite implements Component {

	List list = new ArrayList();  
    
    //添加  
    public void addComponent(Component component){  
        list.add(component);  
    }  
    //删除  
    public void removeComponent(Component component){  
        list.remove(component);  
    }  
      
    //get  
    public List getAll(){  
        return list;  
    }  
      
    public void run(){  
        for(Component component : list){  
            component.run();  
        }  
    }  

}

 

//Client.java

package com.youngmaster.model.Composite;

/**
 * @author youngmaster
 * @E-mail:[email protected]
 * @version eclipse 3.4
 * @create time:2009-9-13 上午03:29:30
 */
public class Client {

	public static void main(String[] args) {

		Leaf leaf1 = new Leaf();
		Leaf leaf2 = new Leaf();
		Leaf leaf3 = new Leaf();

		Composite composite = new Composite();

		composite.addComponent(leaf1);
		composite.addComponent(leaf2);

		Composite composite1 = new Composite();
		composite1.addComponent(composite);
		composite1.addComponent(leaf3);

		composite1.run();

	}

}
 

关于设计模式,还有一篇图文并茂的文章,非常好:

http://blog.csdn.net/xmouse/archive/2008/04/11/2281920.aspx

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