概述
适用性:你想表达部分与整体层次结构。你希望用户忽略对象与单个对象的不同,用户统一的使用组合文件中的所有对象。Component可以是单个节点,也可是是一个节点集合。
UML类图
示例代码
public abstract class Component {
protected String name;
public Component(String name) {
this.name = name;
}
public abstract void Operation();
public abstract void ADD(Component com);
public abstract void REMOVE(Component com);
public abstract int getChild();
}
public class Leaf extends Component {
public Leaf(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void Operation() {
// TODO Auto-generated method stub
System.out.println("Leaf Operation :" + name);
}
@Override
public int getChild() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void ADD(Component com) {
// TODO Auto-generated method stub
}
@Override
public void REMOVE(Component com) {
// TODO Auto-generated method stub
}
}
public class Composite extends Component {
private List<Component> children = new ArrayList<Component>();
public Composite(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void Operation() {
// TODO Auto-generated method stub
System.out.println("Composite Operation :" + name);
Iterator<Component> iterator = children.iterator();
while(iterator.hasNext()){
iterator.next().Operation();
}
}
@Override
public int getChild() {
// TODO Auto-generated method stub
return children.size();
}
@Override
public void ADD(Component com) {
// TODO Auto-generated method stub
children.add(com);
}
@Override
public void REMOVE(Component com) {
// TODO Auto-generated method stub
children.remove(com);
}
}
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
Composite composite = new Composite("Root");
composite.ADD(new Leaf("Leaf A"));
composite.ADD(new Leaf("Leaf B"));
composite.ADD(new Leaf("Leaf C"));
Composite compositeA =new Composite("RootA");
compositeA.ADD(new Leaf("Leaf AA"));
compositeA.ADD(composite);
compositeA.Operation();
}
}