Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 設計模式介紹之三:命令模式(command)

設計模式介紹之三:命令模式(command)

編輯:關於Android編程

命令(模式)的結構很簡單,但對於消除代碼間的耦合卻有著重要的影響。

在 C 語言中我們經常使用回調函數,而命令模式是回調( callback )的面向對象的替代物。從最直觀的角度來看,命令模式就是一個函數對象:一個作為對象的函數。通過將函數封裝為對象,就能夠以參數的形式將其傳遞給其他函數或者對象,告訴他們在履行請求的過程中執行特定的操作。可以說,命令模式是攜帶行為信息的信使。

命令模式對於構建 GUI 應用有特別重要的意義,比如菜單的響應,使用 MFC 時我們通過一系列的 on_command 宏來關聯菜單操作,而如果采用命令模式和工廠模式,將可以得到更精巧的實現。

意圖

將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日志,以及支持可撤消的操作。 已知應用舉例
Qt , QAction 常見問題
Command 對象生命周期維護 適用環境
抽象出待執行的動作以參數化某對象。在不確定的時刻指定、排列和執行請求支持取消操作支持修改日志用構建在原語操作上的高層操作構造一個系統不關注怎樣執行,只關注有對象可以接受執行請求 命令模式實例1

class CommandObject
{
public:
    CommandObject(){}
    virtual ~CommandObject(){}

    virtual void execute() = 0;
};

class EchoCommand: public CommandObject
{
public:
    void execute()
    {
        cout << "I\'m echo command";
    }
};

class HelloCommand: public CommandObject
{
public:
    void execute()
    {
        cout << "Hello hello, how are you";
    }
};
我們可以把 EchoCommand 和 HelloCommand 兩個命令對象傳遞出去,其他部分的代碼只需要知道在特定條件發生時有對象執行命令,而無需知道是誰、在執行什麼命令。

接下來看另外一個有點實際意義的例子。假如我們實現一個 GUI 程序,主頁面上有多個按鈕,點擊按鈕後會執行一個命令,如打開新窗口、打開浏覽器、打開文件夾、退出程序之類的。

命令模式實例2

class CPushButton : public IButton {
public:
    void setCommandObject(CommandObject * commandObject){
        if(m_pCommand)
        {
            delete m_pCommand;
        }
        m_pCommand = commandObject;
    }	

    void onClicked()
    {
        m_pCommand->execute();
    }	
private:
    CommandObject * m_pCommand;
};
我們可以把按鈕的信息寫在配置文件中,如名字、圖標、位置等,而每個按鈕要執行的命令通過一個字符串表示,也寫在配置文件中。程序啟動時解析配置文件,生成界面,根據配置文件中的命令字符串通過工廠模式創建一個命令對象並與按鈕關聯(如上面的代碼所示,通過 setCommandObject 方法給按鈕設置命令對象),這樣一個極具擴展性的程序就完成了。

接下來會介紹工廠模式,結合單例模式、命令模式,實現一個有意義的例子。


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved