Command
#include <iostream> using namespace std;
#define DESTROY_POINTER(ptr) if (ptr) { delete ptr; ptr = NULL; } class Receiver
{
public:
void Action1() { cout<<"Receiver::Action1"<<endl; }
void Action2() { cout<<"Receiver::Action2"<<endl; }
void Action3() { cout<<"Receiver::Action3"<<endl; }
}; class Command
{
public:
Command(Receiver* pReceiver) { m_pReceiver = pReceiver; }
virtual ~Command() { DESTROY_POINTER(m_pReceiver); } virtual void Execute()=; protected:
Receiver* m_pReceiver;
}; class ConcreteCommandA : public Command
{
public:
ConcreteCommandA(Receiver* pReceiver) : Command(pReceiver) {} virtual void Execute() { m_pReceiver->Action1(); }
}; class ConcreteCommandB : public Command
{
public:
ConcreteCommandB(Receiver* pReceiver) : Command(pReceiver) {}
virtual void Execute() { m_pReceiver->Action2(); }
}; class ConcreteCommandC : public Command
{
public:
ConcreteCommandC(Receiver* pReceiver) : Command(pReceiver) {}
virtual void Execute() { m_pReceiver->Action3(); }
}; class Invoker
{
public:
Invoker(Command* pCommand) { m_pCommand = pCommand; }
~Invoker() { DESTROY_POINTER(m_pCommand); } void Request() { m_pCommand->Execute(); } private:
Command* m_pCommand;
}; int main(int argc, char *argv[])
{
Receiver* pReceiver = new Receiver; Invoker invoker1(new ConcreteCommandA(pReceiver));
invoker1.Request(); Invoker invoker2(new ConcreteCommandB(pReceiver));
invoker2.Request(); Invoker invoker3(new ConcreteCommandC(pReceiver));
invoker3.Request(); return ;
}
Command的更多相关文章
- ifconfig: command not found(CentOS专版,其他的可以参考)
ifconfig: command not found 查看path配置(echo相当于c中的printf,C#中的Console.WriteLine) echo $PATH 解决方案1:先看看是不是 ...
- scp报错 -bash: scp: command not found
环境:RHEL6.5 使用scp命令报错: [root@oradb23 media]# scp /etc/hosts oradb24:/etc/ -bash: scp: command not fou ...
- ENode框架单台机器在处理Command时的设计思路
设计目标 尽量快的处理命令和事件,保证吞吐量: 处理完一个命令后不需要等待命令产生的事件持久化完成就能处理下一个命令,从而保证领域内的业务逻辑处理不依赖于持久化IO,实现真正的in-memory: 保 ...
- 设计模式(六):控制台中的“命令模式”(Command Pattern)
今天的博客中就来系统的整理一下“命令模式”.说到命令模式,我就想起了控制台(Console)中的命令.无论是Windows操作系统(cmd.exe)还是Linux操作系统(命令行式shell(Comm ...
- GET command找不到
谷歌的: On running a cronjob with get command, I was getting the following error. /bin/sh: GET: command ...
- source /etc/profile报错-bash: id:command is not found
由于误操作导致 source /etc/profile 报错 -bash: id:command is not found 此时,linux下很多命令到不能能用,包括vi ls 等... 可以使用 e ...
- Webform(七)——内置对象(Session、Application)和Repeater的Command操作
内置对象:用于页面之间的数据交互 为什么要使用这么内置对象?因为HTTP的无状态性. 一.内置对象 (一)Session 跟Cookies一样用来存储用户数据 1.Session.Cookies对比 ...
- MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL
MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL 是因为目标板的芯片处于休眠 ...
- mac 修改command+q 退出
实在受不了! 在chrome中command+w 是关闭当前页面,command+q 退出浏览器: 经常查阅资料打开了N多个窗口,关闭时不小心将command+q当command+w按: so ... ...
- Ubuntu中配置Java环境变量时,出现command not found问题解决记录
百度出Ubuntu中配置Java环境变量时,在利用sudo gedit /etc/profile 对profile编辑后, 在terminal中输入 sudo source /etc/profile, ...
随机推荐
- ms sqlserver 系列之如何查看数据链接数
[转]如何查看SQL SERVER数据库当前连接数 1.通过管理工具开始->管理工具->性能(或者是运行里面输入mmc)然后通过添加计数器添加 SQL 的常用统计然后在下面列出的项目里面选 ...
- 9.链式A+B
题目描述 有两个用链表表示的整数,每个结点包含一个数位.这些数位是反向存放的,也就是个位排在链表的首部.编写函数对这两个整数求和,并用链表形式返回结果. 给定两个链表ListNode* A,ListN ...
- ubuntu14安装ambari2.2
https://cwiki.apache.org/confluence/display/AMBARI/Install+Ambari+2.2.0+from+Public+Repositories 查看是 ...
- (转)C#操作PPT
原文地址:http://blog.163.com/loveyingchun_1314/blog/static/2382425120124312627530/ 引用Microsoft.Office.Co ...
- java中的 json 处理包
Jackson 以前很火 Fastjson 阿里巴巴出品
- python 调用内部类的两种方法
class Car:#外部类 class Door:#内部类 def open(self): print('open door') class Wheel: def run(self): print( ...
- OC基础(1)
Objective-C简介 OC和C对比 第一个OC程序 面向对象思想 *:first-child { margin-top: 0 !important; } body > *:last-chi ...
- 中南大学第一届长沙地区程序设计邀请赛 New Sorting Algorithm
1352: New Sorting Algorithm Time Limit: 1 Sec Memory Limit: 128 MB Description We are trying to use ...
- Map集合的遍历方式:
迭代器来遍历 : entrySet() ; keySet(); values(); eg.HashMap<String,String> map = new HashMap<Strin ...
- 关闭linux下的使用的端口
lsof -P -n -i kill pid 另外防火墙 iptables之类的也可以关闭端口