您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
JUNIT源碼探秘系列(下)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時間:[ 2013/4/16 14:34:04 ] 推薦標(biāo)簽:

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

在面向過程的編程中,類似于樹形結(jié)構(gòu)或者文件目錄結(jié)構(gòu),一般使用遞歸的方式進(jìn)行處理,而在面向過程中,對于這類問題抽象處理為組合模式。

組合模式(Composite Pattern)有時候又叫做部分-整體模式,它在處理樹型結(jié)構(gòu)的問題中,模糊了簡單元素和復(fù)雜元素的概念,客戶程序可以向處理簡單元素一樣來處理復(fù)雜元素,從而使得客戶程序與復(fù)雜元素的內(nèi)部結(jié)構(gòu)解耦。組合模式讓你可以優(yōu)化處理遞歸或分級數(shù)據(jù)結(jié)構(gòu)。

對于組合模式的角色也比較簡單,我們試著對文件目錄結(jié)構(gòu)進(jìn)行分析,在文件目錄結(jié)構(gòu)中至少有兩種結(jié)構(gòu),一種是文件,一種是目錄。對于這兩個角色大的區(qū)別是,一個是葉子節(jié)點,一個是樹枝結(jié)構(gòu)。那么也可以把這兩個對象抽象成一個接口類。這樣分析后文件目錄結(jié)構(gòu)有三個角色,即葉子(葉子組件),樹枝 (組合組件),抽象結(jié)構(gòu)(抽象構(gòu)件接口)。下面對每個角色具體分析

抽象構(gòu)件角色(Component):它為組合中的對象聲明接口,也可以為共有接口實現(xiàn)缺省行為。

 樹葉構(gòu)件角色(Leaf):在組合中表示葉節(jié)點對象——沒有子節(jié)點,實現(xiàn)抽象構(gòu)件角色聲明的接口。

樹枝構(gòu)件角色(Composite):在組合中表示分支節(jié)點對象——有子節(jié)點,實現(xiàn)抽象構(gòu)件角色聲明的接口;存儲子部件。

Client(客戶端)

–通過Component接口控制組合部件的對象

各個角色之間關(guān)系如下:

如圖上圖所示:一個Composite實例可以像一個簡單的Leaf實例一樣,可以把它傳遞給任何使用Component的方法或者對象,并且它表現(xiàn)的像是一個Leaf一樣。使用組合模式使得這個設(shè)計結(jié)構(gòu)非常靈活。

各個角色代碼實現(xiàn)如下:

抽象構(gòu)件角色(Component):

public interface Component

{

   public void doSomething();

}

樹葉構(gòu)件角色(Leaf):

public class Leaf implements Component

{

   @Override

   public void doSomething()

   {

      System.out.println("執(zhí)行方法");

   }

}

樹枝構(gòu)件角色(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下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd