4.效果:
1)命令模式將調(diào)用操作的對象與如何實現(xiàn)該操作的對象解耦。
2)將命令當(dāng)成一個頭等對象,它們可以像一般對象那樣進(jìn)行操縱和擴(kuò)展
3)可以將多個命令復(fù)合成一個命令,與Composite模式結(jié)合使用
4)增加新的命令很容易,隔離對現(xiàn)有類的影響
5)可以與備忘錄模式配合,實現(xiàn)撤銷功能。
在了解了Command模式之后,那我們來看JUnit的源碼,Test接口是命令的抽象接口,而TestCase和TestSuite是具體的命令
<!---->//抽象命令接口
package junit.framework;
/**
* A <em>Test</em> can be run and collect its results.
*
* @see TestResult
*/
public interface Test {
/**
* Counts the number of test cases that will be run by this test.
*/
public abstract int countTestCases();
/**
* Runs a test and collects its result in a TestResult instance.
*/
public abstract void run(TestResult result);
}
//具體命令一
public abstract class TestCase extends Assert implements Test {
/**
* the name of the test case
*/
private final String fName;
/**
//具體命令二
public class TestSuite implements Test {
由此帶來的好處:
1.客戶無需使用任何條件語句去判斷測試的類型,可以用統(tǒng)一的方式調(diào)用測試和測試套件,解除了客戶與具體測試子類的耦合
2.如果要增加新的TestCase也很容易,實現(xiàn)Test接口即可,不會影響到其他類。
3.很明顯,TestSuite是通過組合多個TestCase的復(fù)合命令,這里使用到了Composite模式(組合)
4.盡管未實現(xiàn)redo和undo操作,但將來也很容易加入并實現(xiàn)。
我們上面說到TestSuite組合了多個TestCase,應(yīng)用到了Composite模式,那什么是Composite模式呢?具體來了解下。
Composite模式
composite模式是對象結(jié)構(gòu)型模式之一。
1.意圖:將對象組合成樹形結(jié)構(gòu)以表示“部分——整體”的層次結(jié)構(gòu)。使得用戶對單個對象和組合結(jié)構(gòu)的使用具有一致性。
2.適用場景:
1)想表示對象的部分-整體層次
2)希望用戶能夠統(tǒng)一地使用組合結(jié)構(gòu)和單個對象。具體到JUnit源碼,我們是希望用戶能夠統(tǒng)一地方式使用TestCase和TestSuite