版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SpeedMe/article/details/41869725
原文地址: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 !