組合模式主要應對的是當一個具體實現一個接口的類中,含有更多的該接口的實例的樹形接口,當執行此接口的方法時怎樣賦予其中的相同接口的方法實現java
1.接口this
public interface IBox { public void process(); }
2.實現接口的類blog
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.應用get
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(); } }