组合模式:把对象组合成树形结构来表现层次结构,使客户以一致的方式来处理个别对象及对象组合。
//这个代码有点长,不太对的起超简的标题。确实稍复杂一点。
//首先定义基类。与常规思路相比其特点在于不定义抽象方法。默认实现是抛出异常。未来由子类各自覆盖实现。如不覆盖则抛出异常表示不支持。
public abstract class Component{
public void add(Component component){
throw new UnsupportedOperationException();
}
public void remove(Component component){
throw new UnsupportedOperationException();
}
public Component getChild(int i){
throw new UnsupportedOperationException();
}
public String getName(){
throw new UnsupportedOperationException();
}
public void show(){
throw new UnsupportedOperationException();
}
//....
}
//叶子节点实现部分方法,部分不支持
public class Leaf extends Component{
String name;
public Leaf(String name){
this.name=name;
}
@Override
public String getName(){
return name;
}
@Override
public void show(){
//ShowBySelf
}
}
//组合节点需要使用递归来完成某些功能
public class Composite extends Component{
ArrayList components=new ArrayList();
String name;
public Composite(String name){
this.name=name;
}
@Override
public void add(Component component){
components.add(component);
}
@Override
public void remove(Component component){
components.remove(component);
}
@Override
public Component getChild(int i){
return (Component)components.get(i);
}
@Override
public String getName(){
return name;
}
@Override
public void show(){
//ShowSelf
//....
Iterator iterator=components.iterator();
while(iterator.hasNext()){
Component component=(Component)iterator.next();
component.show();
}
}
}
//组合模式常用于GUI组件的设计