您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > junit
JUNIT源码探秘系列(下)
作者:网络转载 发布时间:[ 2013/4/16 14:34:04 ] 推荐标签:

JUNIT源码探秘(六):Junit代码分析之组合模式

在面向过程的编程中,类似于树形结构或者文件目录结构,一般使用递归的方式进行处理,而在面向过程中,对于这类问题抽象处理为组合模式。

组合模式(Composite Pattern)有时候又叫做部分-整体模式,它在处理树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。组合模式让你可以优化处理递归或分级数据结构。

对于组合模式的角色也比较简单,我们试着对文件目录结构进行分析,在文件目录结构中至少有两种结构,一种是文件,一种是目录。对于这两个角色大的区别是,一个是叶子节点,一个是树枝结构。那么也可以把这两个对象抽象成一个接口类。这样分析后文件目录结构有三个角色,即叶子(叶子组件),树枝 (组合组件),抽象结构(抽象构件接口)。下面对每个角色具体分析

抽象构件角色(Component):它为组合中的对象声明接口,也可以为共有接口实现缺省行为。

 树叶构件角色(Leaf):在组合中表示叶节点对象——没有子节点,实现抽象构件角色声明的接口。

树枝构件角色(Composite):在组合中表示分支节点对象——有子节点,实现抽象构件角色声明的接口;存储子部件。

Client(客户端)

–通过Component接口控制组合部件的对象

各个角色之间关系如下:

如图上图所示:一个Composite实例可以像一个简单的Leaf实例一样,可以把它传递给任何使用Component的方法或者对象,并且它表现的像是一个Leaf一样。使用组合模式使得这个设计结构非常灵活。

各个角色代码实现如下:

抽象构件角色(Component):

public interface Component

{

   public void doSomething();

}

树叶构件角色(Leaf):

public class Leaf implements Component

{

   @Override

   public void doSomething()

   {

      System.out.println("执行方法");

   }

}

树枝构件角色(Composite):

public class Composite implements Component

{

   private List list = newArrayList();

   public void add(Component component)

   {

      list.add(component);

   }

   public void remove(Component component)

   {

      list.remove(component);

   }

   public List getAll()

   {

      return this.list;

   }

   public void doSomething()

   {

      for(Component component : list)

      {

         component.doSomething();

      }

   }

}

上一页1234567下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd