将对象组合成树状层出结构,使用户能一致地使用叶子节点和分支节点
package com.jerry.design.composite;
import java.util.ArrayList;
import java.util.List;
// 测试类
public class Test {
public static void main(String[] args) {
Component root = new Composite();
Component c1 = new Composite();
Component c2 = new Composite();
Component l1 = new Leaf();
Component l2 = new Leaf();
Component l3 = new Leaf();
root.addChild(c1);
root.addChild(c2);
root.addChild(l1);
c1.addChild(l2);
c1.addChild(l3);
System.out.println(root.getChild(0));
System.out.println(root.getChild(1));
System.out.println(root.getChild(2));
}
}
interface Component{
public void doSomething();
public void addChild(Component c);
public void removeChild(Component c);
public Component getChild(int index);
}
class Composite implements Component{
private List<Component> children = null;
@Override
public void doSomething() {
if(children!=null){
for(Component c:children){
c.doSomething();
}
}
}
@Override
public void addChild(Component c) {
if(children==null){
children = new ArrayList<Component>();
}
children.add(c);
}
@Override
public void removeChild(Component c) {
if(children!=null){
children.remove(c);
}
}
@Override
public Component getChild(int index) {
if(children!=null){
return children.get(index);
}
return null;
}
}
class Leaf extends Composite{
public void doSomething() {
System.out.println("Leaf is doSomething()");
}
}