import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
/**
* 组合模式。
* @author Bright Lee
*/
public class CompositePattern {
public static void main(String[] args) {
Component root = new Composite();
Component leaf = new Leaf();
root.add(leaf);
root.operation();
}
}
/**
* Component为组合中的所有对象定义一个接口,不管是组合还是叶节点。
*/
interface Component {
void operation();
void add(Component component);
void remove(Component component);
List<Component> getChildren();
}
/**
* 组合。
*/
class Composite implements Component {
private LinkedHashMap<Component, Component> childrenMap =
new LinkedHashMap<Component, Component>();
public void operation() {
System.out.println("我是一个Composite,我的子节点是:");
List<Component> children = getChildren();
for (Component child : children) {
child.operation();
}
}
public void add(Component component) {
childrenMap.put(component, component);
}
public void remove(Component component) {
childrenMap.remove(component);
}
public List<Component> getChildren() {
List<Component> list =
new ArrayList<Component>(childrenMap.values());
return list;
}
}
/**
* 叶子节点。
*/
class Leaf implements Component {
public void operation() {
System.out.println("我是一个Leaf。");
}
public void add(Component component) {
}
public void remove(Component component) {
}
public List<Component> getChildren() {
List<Component> list =
new ArrayList<Component>(0);
return list;
}
}
运行结果:
我是一个Composite,我的子节点是:
我是一个Leaf。