Command命令模式_第1頁
Command命令模式_第2頁
Command命令模式_第3頁
Command命令模式_第4頁
Command命令模式_第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、設計模式-Command(命令)模式 GoF:將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數華;對請求排隊或記錄請求日志,以及支持克撤銷的操作。 在網上查找Command模式的相關資料,大多都是關于用戶界面的。可能和GOF的先入為主有關系。在GoF的書中,四位作者舉了個文本編輯器的例子。Command模式通過將請求本身變成一個對象來使工具箱對象可向未指定的應用對象提出請求。這個對象可被存儲并像其他對象一樣被傳遞。記得以前在設計模式精解的讀書筆記中學習了幾條經驗,其中一條是:注意封裝變化點。在Command模式中就是對變化點的典型封裝。在Command模式中有

2、一個關鍵的抽象類,一般人們命名為Command類。他定義了一個執行操作的接口。它有一個抽象的execute操作。具體的Command子類(繼承自Command的具體類)將接收者(Receiver類)作為其一個事例變量,并實現execute操作,指定接收者采取的動作。而接收者有執行該請求所需要的具體信息。 下面舉個例子:  先定義關鍵的Command抽象類(這里也可以用接口):package Command;public abstract class Command.    protected&#

3、160;Receiver receiver;      public Command(Receiver receiver)     .         this.receiver = receiver;     /end Command(.)    

4、abstract public void execute();    /end abstract class Command再繼承一個具體類:package Command;public class ConcreteCommand extends Command.        public ConcreteCommand( Receiver

5、60;receiver )    .        super(receiver);    /end ConcreteCommand(.)     public void execute()     .        &

6、#160;receiver.action();     /end execute()/end class ConcreteCommand定義一個Receiver類:package Command;public class Receiver.    public void action()     .      

7、0;  System.out.println("Receiver.Action()");    /end Action()    /end class Receiver定義一個Invoker類:package Command;class Invoker .     private Command command;   

8、  public void setCommand( Command command )     .         mand = command;     /end setCommand(.)    public void executeComman

9、d()     .         command.execute();     /end executeCommand()    /end class Invoker最后是調用:package Command;public class CommandPattern.   

10、60;Receiver rceiver = new Receiver();     Command command = new ConcreteCommand(rceiver);     Invoker invoker = new Invoker();    /* */* Creates a new

11、 instance of CommandPattern */    public CommandPattern()    .            /end CommandPattern        public void showCom

12、mandPattern()    .        invoker.setCommand(command);        invoker.executeCommand();    /end showCommandPattern()        public 

13、;static void main(String args)    .        System.out.println("-");        System.out.println("The Command Pattern!");      &

14、#160; CommandPattern cp = new CommandPattern();        cp.showCommandPattern();        System.out.println("-");    /end main(.)    /end 

15、;class CommandPattern下面給出UML圖,看一下他們之間的關系:關于Command模式的知識在GoF的書里還介紹了好多,在我所做過的項目中一直也沒有用到過Command模式所以在這里也就不多說了,詳細的還是參考GOF的書吧。設計模式之Command板橋里人 2002/4/23/(轉載請保留)模式實戰書籍Java實用系統開發指南Command模式是最讓我疑惑的一個模式,我在閱讀了很多代碼后,才感覺隱約掌握其大概原理,我認為理解設計模式最主要是掌握起原理構造,這樣才對自己實際編程有指導作用.Command模式實際上不是個很具體,規定很多的模式,正是這個靈活性,讓人有些c

16、onfuse.Command定義n 將來自客戶端的請求傳入一個對象,無需了解這個請求激活的 動作或有關接受這個請求的處理細節。這是一種兩臺機器之間通訊聯系性質的模式,類似傳統過程語 言的 CallBack功能。 優點:解耦了發送者和接受者之間聯系。 發送者調用一個操作,接受者接受請求執行相應的動作,因為使用Command模式解耦,發送者無需知道接受者任何接口。不少Command模式的代碼都是針對圖形界面的,它實際就是菜單命令,我們在一個下拉菜單選擇一個命令時,然后會執行一些動作.將這些命令封裝成在一個類中,然后用戶(調用者)再對這個類進行操作,這就是Command模式,換句話說,本來用戶(調用

17、者)是直接調用這些命令的,如菜單上打開文檔(調用者),就直接指向打開文檔的代碼,使用Command模式,就是在這兩者之間增加一個中間者,將這種直接關系拗斷,同時兩者之間都隔離,基本沒有關系了.顯然這樣做的好處是符合封裝的特性,降低耦合度,Command是將對行為進行封裝的典型模式,Factory是將創建進行封裝的模式,從Command模式,我也發現設計模式一個"通病":好象喜歡將簡單的問題復雜化, 喜歡在不同類中增加第三者,當然這樣做有利于代碼的健壯性 可維護性 還有復用性.如何使用?具體的Command模式代碼各式各樣,因為如何封裝命令,不同系統,有不同的做法.下面事例是

18、將命令封裝在一個Collection的List中,任何對象一旦加入List中,實際上裝入了一個封閉的黑盒中,對象的特性消失了,只有取出時,才有可能模糊的分辨出:典型的Command模式需要有一個接口.接口中有一個統一的方法,這就是"將命令/請求封裝為對象":public interface Command public abstract void execute ( );具體不同命令/請求代碼是實現接口Command,下面有三個具體命令public class Engineer implements Command public void execute( ) /do En

19、gineer's command public class Programmer implements Command public void execute( ) /do programmer's commandpublic class Politician implements Command public void execute( ) /do Politician's command按照通常做法,我們就可以直接調用這三個Command,但是使用Command模式,我們要將他們封裝起來,扔到黑盒子List里去:public class producerpublic static List produceRequests() List queue = new ArrayList();queue.add( new DomesticEngineer() );queue.add( new Politician() );queue.add( new Programmer() );return queue;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論