• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C++设计模式浅识命令模式

c# 搞代码 4年前 (2022-01-09) 14次浏览 已收录 0个评论

命令模式(Command)将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

测试用例:

[code]int main(){    Barbecuer boy;    BakeChickenWingCommand bakechickenwingcommand1(boy);    BakeChickenWingCommand bakechickenwingcommand2(boy);    BakeMuttonCommand bakemuttoncommand1(boy);    BakeMuttonCommand bakemuttoncommand2(boy);    Waiter girl;    girl.SetOrder(&bakechickenwingcommand1);    girl.SetOrder(&bakechickenwingcommand2);    girl.SetOrder(&bakemuttoncommand1);    girl.SetOrder(&bakemuttoncommand2);    girl.Notify();    girl.CancelOrder(&bakechickenwingcommand2);    girl.Notify();    return 0;}

类实现:

[code]class Barbecuer{public:    void BakeMutton()  <div style="color:transparent">本文来源gaodai.ma#com搞#代!码(网</div>  {        cout << "Meat\n";    }    void BakeChickenWing()    {        cout << "Chicken\n";    }};class Command{protected:    Barbecuer receiver;public:    Command(){}    Command(Barbecuer & b) :receiver(b){}    virtual void ExcuteCommand() = 0;};class BakeMuttonCommand :public Command{public:    BakeMuttonCommand(Barbecuer & b) { receiver = b; }    void ExcuteCommand(){ receiver.BakeMutton(); }};class BakeChickenWingCommand :public Command{public:    BakeChickenWingCommand(Barbecuer & b) { receiver = b; }    void ExcuteCommand(){ receiver.BakeChickenWing(); }};class Waiter{    list<Command *>orders;public:    void SetOrder(Command * comptr);    void CancelOrder(Command * comptr);    void Notify();};void Waiter::SetOrder(Command * comptr){    orders.push_back(comptr);    cout << "Add order\n";}void Waiter::CancelOrder(Command * comptr){    orders.remove(comptr);    cout << "Cancel order\n";}void Waiter::Notify(){    for each (Command * var in orders){        var->ExcuteCommand();    }}

总结:

较容易的设计一个命令队列;

在需要的情况下,可以较容易地将命令记入日志;

允许接收请求的一方决定是否否决请求;

可以容易地实现对请求的撤销和重做;

由于加进新的命令类不影响其他的类,因为增加新的具体命令类很容易。

命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分割开

以上就是C++设计模式浅识命令模式的内容,更多相关内容请随时关注我们网站!



搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C++设计模式浅识命令模式

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址