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

JUNIT源碼探秘(四):Junit代碼分析之命令模式

 Junit在執(zhí)行測試代碼時,使用了命令模式,那么什么是命令模式,拿幾個例子來說明下。

在《java與模式》書中,用一個很生動的例子來說明命令模式,“玉帝傳美猴王上天”。在這我們也用這個例子說明下;這個事情整個過程如下:

玉帝傳美猴王上天

整個過程有兩個很明顯的角色,玉帝和美猴王;仔細(xì)想想,這個玉帝不可能親自教美猴王去吧?那么派誰去呢?通過簡單分析,兩外一個角色出現(xiàn)了,傳遞命令者(設(shè)計模式中叫調(diào)用者)宮中的跟隨者或者太監(jiān)等人,那么玉帝派太白金星;光太白金星自己去還不行,必須拿著玉帝的信物,比如圣旨、或者其他。那么到底是什么東西呢?這個要看玉帝給他什么東西,他拿什么東西;在仔細(xì)想想,那么玉帝給的東西可能裝在一個盒子里或者信封里,具體什么東西都無所謂了,那么我們可以把這個盒子或者信封看做這個信物的接口,而盒子或者信物里的具體信物看做一個實現(xiàn)類。

通過這么一分析,那么我們可以看出整個命令模式中有五個對象:

傳遞信物的盒子或者信封

信封或者盒子中的具體信物

傳遞信息者太白金星

下達指令者玉皇大帝

執(zhí)行命令著美猴王

在命令模式中剛好也有五個角色如下:

客戶(Client)角色:創(chuàng)建一個具體的命令(ConcreteCommand)對象,并確定其接受者。這個角色當(dāng)然是玉皇大帝了。

命令(Command)角色:聲明給所有具體命令類的抽象接口,這是一個抽象角色,通常通過java的接口實現(xiàn);這個對應(yīng)到這個實例中可以看做是傳遞信物的盒子或者信封等

具體命令(ConcreteCommand)角色:定義一個接收者和行為之間的弱耦合,實現(xiàn)execute()方法,負(fù)責(zé)調(diào)用接受者的相應(yīng)操作,execute()方法通常叫執(zhí)行方法,對應(yīng)到實例可以看做是盒子里的具體信物,比如圣旨、或者其他具有玉皇大帝省份標(biāo)示的東西

請求者(Invoker)角色:負(fù)責(zé)調(diào)用命令對象執(zhí)行請求,相關(guān)的測試方法叫做行動方法。在這個實例中太白金星扮演這個角色。

接受者(Receiver)角色:負(fù)責(zé)具體實施和請求一個請求。任何一個類都可以成為接受者,實施和執(zhí)行請求的方法叫做行動方法。這個實例中這個角色自然是美猴王了。

       具體代碼實現(xiàn),先從接受者開始

         接受者(Receiver)

public class Receiver {

   public void doAction(){

      System.out.println("上天");

   }

}

命令(Command)

public interface Command {

   public void execute();

}

具體命令(ConcreteCommand)

public class ConcreteCommand implements Command {

   private Receiver receiver;

 

   public ConcreteCommand(Receiver receiver) {

      this.receiver = receiver;

   }

   public void execute() {

      receiver.doAction();

   }

}

 

請求者(Invoker)

public class Invoker {

   private Command command;

   public Invoker(Command command) {

      this.command = command;

   }

   public void doInvokerAction() {

      command.execute();

   }

}

客戶(Client)

public class Client {

   public static void main(String[] args)

   {

      Receiver receiver = new Receiver();   

      Command command = new ConcreteCommand(receiver);

      Invoker invoker = new Invoker(command);

      invoker.doInvokerAction();

   }

}

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