首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

【设计方式】烤羊肉串引来的思考 - 命令模式

2012-08-10 
【设计模式】烤羊肉串引来的思考---命令模式一,概述定义:命令模式将一个请求或者操作封装到一个命令对象中。

【设计模式】烤羊肉串引来的思考 --- 命令模式

一,概述

        定义:命令模式将一个请求或者操作封装到一个命令对象中。允许系统使用不同的请求将客户端参数化,对请求排队或者记录请求日志,提供命令的撤销,恢复能力

        优点:

1 命令模式使新的命令很容易被加入

2 允许接受请求方否决请求

3 可较容易地设计一个命令队列

4 可以实现对请求的Undo,Redo

5 可以将命令计入日志

二,示例

        两个人 去吃烧烤,先路过一个烧烤摊,人多管理比较混乱,命令请求者跟命令实施者“紧耦合”。

        人太对,没吃,然后去烧烤店,遇到了经典的命令模式:服务生负责记录命令,传递命令。厨师负责执行命令。顾客则发出命令

       1)烧烤摊代码

#include <iostream>using namespace std;  class Receiver//执行命令类  { public: void Action()  {   cout<<"执行请求!"<<endl;  } };  class Command //声明执行操作的接口  { protected:  Receiver *receiver;public:Command(Receiver *receiver)        {            this->receiver = receiver;        }        virtual  void Execute()=0;};     class Invoker//要求该命令执行这个请求 {        private:     Command *command;        public:    void SetCommand(Command *command)            {                  this->command = command;            }        void ExecuteCommand()        {            command->Execute();        }}; class ConcreteCommand :public Command //将一个接收者对象绑定于一个动作 {public:ConcreteCommand(Receiver *receiver):Command(receiver) { }void Execute()      //实现命令接口  {  receiver->Action();  }}; int main(){Receiver *r = new Receiver();//命令的真正执行类 (后台厨师) Command *c = new ConcreteCommand(r);//将命令绑定到 命令执行者 (顾客) Invoker *i = new Invoker();//要求命令执行者执行命令(记账单的小生) // Set and execute command i->SetCommand(c);i->ExecuteCommand();system("pause"); } 


热点排行