命令模式:
將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化;對請求排隊或記錄請求日誌,以及支援可撤銷的操作。
動機:需要對請求
進行排隊,記錄,以及撤銷操作
。所以需要
將請求發起者和實現者分離
,將請求封裝成物件。
思路:插入乙個中間層,消除緊耦合。
通常呼叫乙個類的某個方法,我們都是
直接呼叫
,發起乙個請求。而命令模式,是將請求封裝成乙個物件。
設計模式的關鍵點是
把依賴關係轉化,都要依賴抽象。
示例:
模擬傳送資料,有多**資料和顯示資料。當讀取到多**資料時,將多**資料傳送出去,當讀取到顯示資料時,將顯示資料傳送出去。
#includeusing namespace std;
class display
else
} return 0;
} #includeusing namespace std;
class display
else
} return 0;
}
需求:現在希望資料來了之後,並不是立即傳送,而是需要排序。沒十次請求中,先傳送顯示資料,再傳送多**資料。
**如下:
#include#include using namespace std;
class display
int getpriority() //傳送優先順序
private:
display* display_sender;
};class **********commnd:public sendcommand
void send()
int getpriority()
private:
*********** mulit_sender; };
bool comp(sendcommand* t1,sendcommand* t2) //按優先順序排序
class sender
sendlist.sort(comp); //排序
if (sendlist.size() == 10)
}}private:
listsendlist;
};#include "test.h"
int main()
; //模擬資料輸入
for(int i = 0;i < 10; i++)
else
}return 0;
}
輸出結果比較:
設計模式 行為型模式 命令模式
將乙個請求封裝為乙個物件,使發出請求的責任和執行請求的責任分割開。這樣兩者之間通過命令物件進行溝通,這樣方便將命令物件進行儲存 傳遞 呼叫 增加和管理。優點通過引入中介軟體 抽象介面 降低系統的耦合度 擴充套件性良好,增加或刪除命令非常方便。採用命令模式增加與刪除命令不會影響其他類,即滿足 開閉原則...
設計模式 行為型模式 命令模式
設計模式 行為型模式 命令模式 以乙個mis系統為栗子 mis 管理資訊系統 management information system,mis 是乙個以人為主導的,利用計算機硬體 軟體和網路裝置,進行資訊的收集 傳遞 儲存 加工 整理的系統,以提高組織的經營效率。如下 public abstrac...
設計模式 行為型 命令模式
設計模式行為型 1.觀察者模式 2.模板模式 3.策略模式 4.職責鏈模式 5.狀態模式 6.迭代器模式 7.訪問者模式 8.備忘錄模式 9.命令模式 10.直譯器模式 11.中介模式 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶端進行引數化,對請求排隊或記錄請求日誌,以及支援可撤銷的操作...