原文地址:http://leihuang.org/2014/12/09/composite/
Structural 模式 如何设计物件之间的静态结构,如何完成物件之间的继承、实 现与依赖关系,这关乎着系统设计出来是否健壮(robust):像是易懂、易维护、易修改、耦合度低等等议题。Structural 模式正如其名,其分类下的模式给出了在不同场合下所适用的各种物件关系结构。
Composite模式是构造型的设计模式之一,通过递归手段来构造诸如文件系统之类的树形的对象结构;Composite模式所代表的数据构造是一群具有统一接口界面的对象集合,并可以通过一个对象来访问所有的对象(遍历)。
举个例子,比如一棵树包括树枝和树叶,树枝上面又有树枝和树叶,这样一直循环下去...如下图

假如让你实现一棵树,你会不会把每一个树枝都给定义出来?肯定不会.那么这就需要用到组合模式.组合模式基本结构如下图.

我们现在就利用组合模式来实现,这棵树.

IBranch 接口
public interface IBranch {
    public void print() ;
}
Leaf 类
public class Leaf implements IBranch {
    private String leaf = null ;
    public Leaf(String leaf){
        this.leaf = leaf ;
    }
    @Override
    public void print() {
        System.out.println(leaf);
    }
}
BranchComposite 类
import java.util.LinkedList;
import java.util.List;
public class BranchComposite implements IBranch {
    private List<IBranch> branchList = null ;
    public BranchComposite(){
        branchList = new LinkedList<IBranch>() ;
    }
    public void add(IBranch branch){
        branchList.add(branch) ;
    }
    public boolean remove(IBranch branch){
        return branchList.remove(branch) ;
    }
    @Override
    public void print() {
        for(IBranch branch : branchList){
            branch.print();
        }
    }
}
Client 类
public class Client {
    public static void main(String[] args) {
        IBranch leaf1 = new Leaf("leaf 1") ;
        IBranch leaf2 = new Leaf("leaf 2") ;
        IBranch leaf3 = new Leaf("leaf 3") ;
        BranchComposite branch0 = new BranchComposite() ;
        BranchComposite branch1 = new BranchComposite() ;
        BranchComposite branch2 = new BranchComposite() ;
        branch0.add(leaf1);
        branch0.add(branch1);
        branch1.add(leaf2);
        branch1.add(branch2);
        branch2.add(leaf3);
        //branch0.print() ;
        //branch1.print() ;
        //branch2.print() ;
    }
}
2014-12-09 17:09:18
Brave,Happy,Thanksgiving !
原文地址:http://blog.csdn.net/speedme/article/details/41869725