设计模式之对象行为型模式 — COMMAND (命令)模式
2017-08-10 12:37
627 查看
意图
将一个请求封装成一个对象 ,从而使你可以用不同的请求对客户进行参数化。对请求进行排队或者记录请求日志,以及支持可撤销的操作。对象交互图
Command 执行操作的接口
client 创建具体的命令对象以及接受者
Invoker 要求该命令执行的这个请求
Receiver 接受者,任何类都可以作为接受者
代码示例
//test.h文件 #include <iostream> #include <list> using namespace std; //接受者 class Receiver { public: Receiver(); ~Receiver(); void Action(); protected: private: }; //命令的抽象基类 class Command { public: virtual ~Command(); virtual void Execute() = 0; protected: Command(); private: }; //Ex指令 class ExCommand:public Command { public: ExCommand(Receiver *re); ~ExCommand(); virtual void Execute(); protected: private: Receiver *m_re; }; //Ac指令 class AcCommand :public Command { public: AcCommand(); ~AcCommand(); virtual void Execute(); private: }; //指令序列Bc 由Ex和Ac组合而成 class BcCommmand:public Command { public: BcCommmand(); virtual ~BcCommmand(); virtual void Add(Command *); virtual void Remove(Command *); virtual void Execute(); private: list <Command *> *m_com; };
//test.cpp 文件 #include "test.h" Command::~Command() { } Command::Command() { } /****************************/ Receiver::Receiver() { } Receiver::~Receiver() { } void Receiver::Action() { cout << "正在执行操作" << endl; } /*************************************/ ExCommand::ExCommand(Receiver *re) :Command(), m_re(re) { } ExCommand::~ExCommand() { } void ExCommand::Execute() { cout <<"正在执行Ex指令 \n"<< "调用接受者\n....." << endl; m_re->Action(); } AcCommand::AcCommand() { } AcCommand::~AcCommand() { } void AcCommand::Execute() { cout << "正在执行Ac指令" << endl; } /*********************************/ BcCommmand::BcCommmand() { m_com = new list<Command *>(); } BcCommmand::~BcCommmand() { } void BcCommmand::Add(Command *com) { m_com->push_back(com); } void BcCommmand::Remove(Command *com) { m_com->remove(com); } void BcCommmand::Execute() { for (auto x:*m_com) { x->Execute(); } }
//main.cpp 文件 #include "test.h" int main() { int a = 0; cout << "输入 1 执行Ex操作 \n输入 2 执行Ac 操作 \n输入 3 执行Bc 操作" << endl; Receiver *re = new Receiver(); ExCommand *ex = new ExCommand(re); AcCommand *ac = new AcCommand(); BcCommmand *bc = new BcCommmand(); bc->Add(ex); bc->Add(ac); while (cin>>a) { switch (a) { case 1: //Invoker ex->Execute(); break; case 2: ac->Execute(); break; case 3: bc->Execute(); break; default: break; } } system("pause"); return 0; }
效果
将调用操作的对象与知道如何实现操作的对象解耦可以将多个命令装配成一个复合命令
新增加命令也很容易,无需改变已有的类
我的个人网站 http://www.breeziness.cn/
我的CSDN http://blog.csdn.net/qq_33775402
转载请注明出处 小风code www.breeziness.cn
相关文章推荐
- 设计模式之命令(Command)---对象行为型模式
- C#面向对象模式设计第十五讲:Command 命令模式(行为型模式)
- 设计模式十五:command(命令模式)——对象行为型模式
- 设计模式--命令模式Command(对象行为型)
- [导入]C#面向对象设计模式纵横谈(15):(行为型模式) Command 命令模式.zip(7.56 MB)
- 十七.行为型设计模式——Command Pattern(命令模式)
- 设计模式(二十二)命令模式(Command)-行为型
- 设计模式(行为型)之命令模式(Command Pattern)
- 设计模式 ( 十三 ) 命令模式Command(对象行为型)
- 设计模式 ( 十三 ) 命令模式Command(对象行为型)
- 重学设计模式 - Command(命令)模式 - 行为型
- 设计模式——行为型之命令模式(Command Pattern)让你的命令发起者和命令执行者的逻辑解耦(六)
- 设计模式(14)-行为型-命令模式(Command)
- 设计模式14---设计模式之命令模式(Command)(行为型)
- 设计模式——行为型模式之 Command 命令模式
- 【设计模式】行为型模式——命令模式(Command Pattern)
- 设计模式 ( 十三 ) 命令模式Command(对象行为型)
- 设计模式笔记 14. Command 命令模式(行为型模式)
- 设计模式学习日志(15)-Command命令(行为型模式) (引用)
- COMMAND(命令)— 对象行为型模式