我的漫漫程序之旅

专注于JavaWeb开发
随笔 - 39, 文章 - 310, 评论 - 411, 引用 - 0
数据加载中……

组合(Composite)模式--实践

组合(Composite)模式主要角色:
1.Component角色
2.Leaf角色
3.Composite角色

package com.pattern.composite;   
/**  
 * 组件抽象角色  
 *  
 
*/
  
public interface Component {   
       
    
public void run();   
  
}
  
package com.pattern.composite;   
/**  
 * 叶子角色  
 *  
 
*/
  
public class Leaf implements Component{   
       
    
public void run(){   
        System.out.println(
" run invoked");   
    }
   
  
}
  


package com.pattern.composite;   
  
import java.util.ArrayList;   
import java.util.List;   
/**  
 * 组合角色  
 * 实现组件角色接口,并且添加,删除的也是组件角色  
 *   
 * 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
<Component> list = new ArrayList<Component>();   
       
    
//添加   
    public void addComponent(Component component){   
        list.add(component);   
    }
   
    
//删除   
    public void removeComponent(Component component){   
        list.remove(component);   
    }
   
       
    
//get   
    public List<Component> getAll(){   
        
return list;   
    }
   
       
    
public void run(){   
        
for(Component component : list){   
            component.run();   
        }
   
    }
   
  
}
  


package com.pattern.composite;   
  
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();   
           
    }
   


posted on 2008-05-17 11:10 々上善若水々 阅读(654) 评论(0)  编辑  收藏 所属分类: 设计模式


只有注册用户登录后才能发表评论。


网站导航: