组合模式主要应对的是当一个具体实现一个接口的类中,含有更多的该接口的实例的树形接口,当执行此接口的方法时怎样赋予其中的相同接口的方法实现
1.接口
public interface IBox {
public void process();
}
2.实现接口的类
1)单一的类
public class SingleBox implements IBox {
public void process() {
// TODO Auto-generated method stub
System.out.println("single box process");
}
}
2.具有树形实现接口的类
public class ContainerBox implements IBox {
List<IBox> list=new ArrayList<IBox>();
public ContainerBox(List<IBox> list){
this.list=list;
}
public void process() {
// TODO Auto-generated method stub
System.out.println("containerBox process");
//组合模式的关键,递归调用
if (null!=list && list.size()>0) {
for(IBox item : list){
item.process();
}
}
}
}
3.应用
public class App {
public static void main(String[] args) {
SingleBox box=new SingleBox();
List<IBox> list=new ArrayList<IBox>();
list.add(box);
ContainerBox containerBox=new ContainerBox(list);
//IBox box=Factory.getBox();
// 对客户程序来说,不需判断有无树形结构
containerBox.process();
}
}