//Component.java
package com.youngmaster.model.Composite;
/**
* @author youngmaster
* @E-mail:youngmaster.fly@gmail.com
* @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:youngmaster.fly@gmail.com
* @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:youngmaster.fly@gmail.com
* @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<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();
}
}
}
//Client.java
package com.youngmaster.model.Composite;
/**
* @author youngmaster
* @E-mail:youngmaster.fly@gmail.com
* @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.youkuaiyun.com/xmouse/archive/2008/04/11/2281920.aspx