首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

Design Patterns 构造模式 之 Composite 模式

2012-10-23 
Design Patterns结构模式 之 Composite 模式Design Patterns结构模式 之 Composite 模式组合模式:将对象以

Design Patterns 结构模式 之 Composite 模式
Design Patterns  结构模式 之 Composite 模式
组合模式:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.
1),安全式

2),透明式

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



热点排行