11.组合模式
组合模式主要应对的是当一个具体实现一个接口的类中,含有更多的该接口的实例的树形接口,当执行此接口的方法时怎样赋予其中的相同接口的方法实现
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(); } }
本人倡导的讲解方式:代码示例[学以致用,不仅要知道理论,还要知道理论怎么付诸实践],
文字讲解[不仅知道要怎么用,还要知道是怎么回事],
画图讲解[有图有真相,用图的形式将代码嵌入到理论中,整体理解]