Jun 10

组合(Composite)模式 不指定

chirs , 15:46 , 瓜哇天地 » 设计模式 , 评论(0) , 引用(0) , 阅读(2341) , Via 本站原创 | |
组合(Composite)模式主要角色:
1.Component角色
2.Leaf角色
3.Composite角色

Java代码
package com.pattern.composite;  
/**  
* 组件抽象角色  
*  
*/  
public interface Component {  
      
    public void run();  
  
}  

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;
/**
* 叶子角色
*
*/
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;

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();  
          
    }  
}  
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]