行为模式之命令
命令模式(Command)是一種對象行為模式,它是把一個請求封裝到一個對象中,使你可以用不同的請求對客戶進(jìn)行參數(shù)化,對請求排隊或記錄請求日志,以及支持可撤銷的操作。命令模式是對命令的封裝,它把發(fā)出命令的責(zé)任與執(zhí)行命令的責(zé)任分開,分別委派給不同的對象。如下圖是命令模式的結(jié)構(gòu)圖:
這里的參與者都有:
Command
— 聲明執(zhí)行操作的接口。
? ConcreteCommand?
— 將一個接收者對象綁定于一個動作。
— 調(diào)用接收者相應(yīng)的操作,以實現(xiàn) Execute。
?Client
— 創(chuàng)建一個具體命令對象并設(shè)定它的接收者。
? Invoker
— 要求該命令執(zhí)行這個請求。
?Receiver
— 知道如何實施與執(zhí)行一個請求相關(guān)的操作。任何類都可能作為一個接收者。
由結(jié)構(gòu)圖給出對應(yīng)的類設(shè)計,代碼如下:
1 class Invoker{//要求命令執(zhí)行請求 2 private Command command; 3 public Invoker(Command c){ 4 command=c; 5 } 6 public void action(){ 7 System.out.println("execute command action"); 8 command.execute(); 9 } 10 } 11 class Receiver{//實施執(zhí)行與請求相關(guān)的操作 12 public void action(){ 13 System.out.println("this is Receiver's action,I will complete service"); 14 } 15 } 16 interface Command{ 17 void execute(); 18 } 19 class ConcreteCommand implements Command{//將一個接收者對象綁定一個動作,并調(diào)用接收者相應(yīng)的操作,以實現(xiàn)execute 20 private Receiver rec; 21 public ConcreteCommand(Receiver rec){ 22 this.rec=rec; 23 } 24 public void execute(){ 25 System.out.println("Call Receiver's action"); 26 rec.action(); 27 } 28 } 29 public class Test{ 30 public static void main(String[] args) { 31 Receiver rec=new Receiver(); 32 Command com=new ConcreteCommand(rec); 33 Invoker inv=new Invoker(com); 34 inv.action(); 35 } 36 } View Code這里,我們定義好命令的接收者對象Receiver,然后將其傳遞給命令對象com,最后由inv要求該命令執(zhí)行這個請求。從這里可以看出,命令模式將發(fā)出命令與執(zhí)行命令這兩個動作分開了,Command發(fā)出命令,但催動該命令的執(zhí)行是Invoker完成的。所以,如果有排隊需求的話,可以在Invoker這里設(shè)置相關(guān)功能。
?
轉(zhuǎn)載于:https://www.cnblogs.com/codeMedita/p/7374251.html
總結(jié)
- 上一篇: RefreshListView中onIt
- 下一篇: udp丢包 处理