基本概念:
在軟件系統(tǒng)中,“行為請求者”與“行為實現(xiàn)者”通常呈現(xiàn)一種“緊耦合”。但在某些場合,比如要對行為進(jìn)行“記錄、撤銷/重做、事務(wù)”等處理,這種無法抵御變化的緊耦合是不合適的。在這種情況下,如何將“行為請求者”與“行為實現(xiàn)者”解耦?將一組行為抽象為對象,實現(xiàn)二者之間的松耦合。這就是命令模式(Command Pattern)。
特點
1)、command模式將調(diào)用操作的對象和實現(xiàn)該操作的對象解耦
2)、可以將多個命令裝配成一個復(fù)合命令,復(fù)合命令是Composite模式的一個實例
3)、增加新的command很容易,無需改變已有的類
應(yīng)用場景:
在軟件系統(tǒng)中,“行為請求者”與“行為實現(xiàn)者”通常呈現(xiàn)一種“緊耦合”。但在某些場合,比如要對行為進(jìn)行“記錄、撤銷/重做、事務(wù)”等處理,這種無法抵御變化的緊耦合是不合適的。在這種情況下,如何將“行為請求者”與“行為實現(xiàn)者”解耦?將一組行為抽象為對象,實現(xiàn)二者之間的松耦合。這就是命令模式(Command Pattern)。
將來自客戶端的請求傳入一個對象,從而使你可用不同的請求對客戶進(jìn)行參數(shù)化。用于“行為請求者”與“行為實現(xiàn)者”解耦,可實現(xiàn)二者之間的松耦合,以便適應(yīng)變化。分離變化與不變的因素。
在面向?qū)ο蟮某绦蛟O(shè)計中,一個對象調(diào)用另一個對象,一般情況下的調(diào)用過程是:創(chuàng)建目標(biāo)對象實例;設(shè)置調(diào)用參數(shù);調(diào)用目標(biāo)對象的方法。
但在有些情況下有必要使用一個專門的類對這種調(diào)用過程加以封裝,我們把這種專門的類稱作command類。
特點
1)、command模式將調(diào)用操作的對象和實現(xiàn)該操作的對象解耦
2)、可以將多個命令裝配成一個復(fù)合命令,復(fù)合命令是Composite模式的一個實例
3)、增加新的command很容易,無需改變已有的類
應(yīng)用場景:
我們來分析下命令模式的使用場景吧,一般情況下如下幾類場景中使用命令模式會達(dá)到很好的效果:
1、當(dāng)一個應(yīng)用程序調(diào)用者與多個目標(biāo)對象之間存在調(diào)用關(guān)系時,并且目標(biāo)對象之間的操作很類似的時候。
2、例如當(dāng)一個目標(biāo)對象內(nèi)部的方法調(diào)用太復(fù)雜,或者內(nèi)部的方法需要協(xié)作才能完成對象的某個特點操作時。
3、有時候調(diào)用者調(diào)用目標(biāo)對象后,需要回調(diào)一些方法。
命令模式是將行為請求者和行為實現(xiàn)者解耦合的方式。對命令進(jìn)行封裝,將命令和執(zhí)行命令分隔開。請求的一方發(fā)出命令,要求執(zhí)行某些操作,接受一方收到命令,執(zhí)行這些操作的真正實現(xiàn)。請求的一方不必知道接受方的接口,以及如何被操作。
命令模式可以應(yīng)用到很多場景,比如實現(xiàn)do/undo功能、實現(xiàn)導(dǎo)航功能。