命令模式:將乙個請求封裝成乙個物件,從而允許你使用不同的請求,佇列或者日誌將客戶端引數化,同
時支援請求操作的撤銷與恢復;
該設計模式主要是為了隔離請求和實際執行者之間接觸,實現兩者的解耦。所有的請求統一有乙個類負責
該類負責管理這些請求。這樣命令物件和接收者之間的耦合度就會降低。命令物件不用直接施加命令到接收者上。
而會通過施加命令到命令介面,通過命令介面例項化出來乙個相應的命令,從而施加到接收者上。
1.我們去餐廳吃飯,我們是通過服務員來點菜,具體是誰來做這些菜和他們什麼時候完成的這些菜,其實我們都不知道。抽象之,我們是「選單請求者」,廚師是「選單實現者」,2者之間是松耦合的,我們對這些菜的其他一些請求比如「撤銷,重做」等,我們也不知道是誰在做。其實這就是本文要說的command模式。將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化;對請求排隊或記錄請求日誌,以及支援可撤消的操作。[gof 《設計模式》]
#include
#include
#include
using
namespace std;
#define safe_delete(p) if (p)
//安全刪除
//燒烤師傅類,最後的執行者
class
barbecuer
void
bakechickenwing()
};//抽象命令類:執行具體操作的介面
class
command
;command
(barbecuer* receiver)
:p_receiver
(receiver)
virtual
void
executecommand()
=0;protected
: barbecuer* p_receiver;};
//具體命令,烤羊肉串命令
class
bakemuttoncommand
:public command
void
executecommand()
};//具體命令,烤雞翅命令
class
bakechickenwingcommand
:public command
void
executecommand()
};//服務員類,相當於命令者
class
waiter
;//按照順序給佇列內新增相應的命令
void waiter::
setorder
(command* command)
//按順序執行所有命令
void waiter::
notify()
}int
main
(int argc,
char
* ar**)
class
command
virtual
void
execute()
=0;virtual
void
undo()
=0;}
;class
moveunitcommand
:public command
virtual
void
execute()
virtual
void
undo()
private
: unit* unit_;
int xbefore_, ybefore_;
int x_, y_;
};
第一章 文字模式遊戲
第一章 文字模式遊戲 文字模式是字元狀態,也是 turbo c 的預設模式 textmode 能把螢幕設定為文字模式 void textmode int mode 1 mode 的值可用模式名 or等價的整數值 2 呼叫該函式後,螢幕復位,所有字元的屬性恢復為預設值 3 textmode c80 意...
設計模式 第一章工廠模式
乙個物件應該只包含單一的職責,並且該職責被完整的封裝到乙個類中 軟體實體應該對擴充套件開放,對修改關閉 所有引用基類的地方必須能透明的使用其子類物件 高層模組不應該依賴底層模組,他們都應該依賴抽象,抽象不應該依賴細節,細節應該依賴於抽象 客戶端不應該依賴他那些不需要的介面 優先使用物件組合,而不是通...
第一章 設計模式分類
工廠方法模式 factory pattern 抽象工廠模式 abstract factory pattern 單例模式 singleton pattern 建造者模式 builder pattern 原型模式 prototype pattern 介面卡模式 adapter pattern 裝飾器模式...