Design Patterns 结构模式 之 Composite 模式

Design Patterns  结构模式 之 Composite 模式
组合模式:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.
1),安全式
Design Patterns 结构模式 之 Composite 模式
2),透明式
Design Patterns 结构模式 之 Composite 模式
组合(Composite)模式主要角色:
1.Component角色
2.Leaf角色
3.Composite角色
/**  
 * 组件抽象角色  
 */  
public interface Component {   
       
    public void run();   
  
}  

/**  
 * 叶子角色  
 */  
public class Leaf implements Component{   
       
    public void run(){   
        System.out.println(" run invoked...");   
    }   
}
 

//组合角色 
实现组件角色接口,并且添加,删除的也是组件角色 
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();   
        }   
    }   
}  



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();   
           
    }   
}
 



你可能感兴趣的:(Pattern,design)