[设计模式]Command命令模式
来源:互联网 发布:软件使用手册标准 编辑:程序博客网 时间:2024/05/16 18:43
command命令模式
Command模式通过将请求封装到一个对象(Command)中,并将请求的接收者存放到具体的ConcreteCommand类中的(reciver)中,从而实现调用操作的对象和操作的具体实现之间的解耦。
解析:Command模式的思想是把命令封装在一个类(Command)中,同时把接收对象也封装在一个类(Receive)中,由调用这个命令的类(Invoker)来调用。其实,如果弄清楚了Command模式的原理,就会发现其实它和注册回调函数的原理很相似,而在面向过程的设计中的回调函数其实和这里的Command类的作用是一致的。采用Command模式解耦了命令的发出者和命令的执行者。
小demo
command.h
#ifndef COMMAND_H#define COMMAND_Hclass Command{public:virtual ~Command() {}virtual void Execute() = 0;};class Receiver{public:void Action();};class Invoker{public:Invoker(Command *pCommand);~Invoker();void Invoke();private:Command *m_pCommand;};class ConcreateComand: public Command{public:ConcreateComand(Receiver* pReceiver);virtual ~ConcreateComand();virtual void Execute();private:Receiver* m_pReceiver;};#endif
command.cpp
#include "Command.h"#include <iostream>void Receiver::Action(){std::cout << "Receiver Action\n";}Invoker::Invoker(Command *pCommand): m_pCommand(pCommand){}Invoker::~Invoker(){delete m_pCommand;m_pCommand = NULL;}void Invoker::Invoke(){if (NULL != m_pCommand){m_pCommand->Execute();}}ConcreateComand::ConcreateComand(Receiver* pReceiver): m_pReceiver(pReceiver){}
main.cpp
#include "Command.h"#include <stdlib.h>int main(){Receiver* pReceiver = new Receiver();Command* pCommand = new ConcreateComand(pReceiver);Invoker* pInvoker = new Invoker(pCommand);pInvoker->Invoke();delete pInvoker;system("pause");return 0;}
Command模式的思想非常简单,但是Command模式也十分常见,并且威力不小。实际上,command模式关键就是提供一个抽象的command类,并将执行操作封装到command类接口中,command类中一般就只是一些接口的集合,并不包含任何的数据属性。好处有:
1.command模式将调用操作的对象和知道如何实现该操作的对象解耦。在command的结构图中,Invoker对象根本就不知道具体的是哪个对象在处理Excute操作(当然要知道是Command类别的对象,也仅此而已)。
2.在command要增加新的处理操作对象很容易,我们可以通过创建新的继承自command的子类来实现这一点。
3.command模式可以喝memento模式结合起来,支持取消的操作。
请求发送者与接收者解耦——命令模式
- Command(命令)设计模式
- 设计模式----Command(命令)模式
- 设计模式--命令模式(Command)
- [设计模式]Command命令模式
- [设计模式]命令模式(Command)
- 设计模式--命令模式Command
- 设计模式: 命令(command)模式
- 设计模式:命令模式-command
- 设计模式之Command(命令)
- 设计模式学习-Command(命令)
- 设计模式:Command(命令)
- 命令设计模式(Command Pattern)
- 设计模式(16)-命令模式(Command)
- 设计模式之Command命令模式
- 设计模式 - Command Pattern(命令模式)
- 设计模式 - Command Pattern(命令模式)
- 设计模式之Command - 命令模式
- 设计模式(18)-命令模式(Command)
- socket 通信中的字节流与字符流
- 邮箱验证
- 关于基于ARM的C语言程序的注意事项之判断语句
- 把图片在数据库中读出来并显示在页面上
- 87
- [设计模式]Command命令模式
- Jetty 源代码分析之NIO连接器
- 利用Java存储过程简化数据库操作
- javascript技巧大全套
- NSData 与 NSString,Byte数组,UIImage 的相互转换
- 邮件客户端
- μC/OS-II练习题
- OK6410汇编程序练习
- 启动代码的分析之ADR,LDR辨析