设计模式读书笔记:Command(命令)

原创 2015年07月10日 17:37:03

意图:

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

结构图:来自 《23种设计模式 - 郗晓勇》


实现:https://github.com/panshiqu/patterns/tree/master/Command

Command

namespace NS_COMMAND {

class Command {
public:
	Command() {}
	virtual ~Command() {}
	virtual void execute(void) = 0;
};

template <class TReceiver>
class SimpleCommand : public Command {
public:
	typedef void (TReceiver:: *Action)();
	SimpleCommand(TReceiver *tr, Action act) : _treceiver(tr), _action(act) {}
	virtual void execute(void);
private:
	TReceiver *_treceiver;
	Action _action;
};

template <class TReceiver>
void SimpleCommand<TReceiver>::execute() {
	(_treceiver->*_action)();
}

} /* namespace NS_COMMAND */
ConcreteCommand

#include "Receiver.h"

namespace NS_COMMAND {

class ConcreteCommand {
public:
	ConcreteCommand(Receiver *receiver) : _receiver(receiver) {}
	virtual ~ConcreteCommand() {}
	virtual void execute(void)
	{
		_receiver->action();
	}

private:
	Receiver *_receiver;
};

} /* namespace NS_COMMAND */
Receiver
#include <iostream>

namespace NS_COMMAND {

class Receiver {
public:
	Receiver() {}
	virtual ~Receiver() {}
	void action(void)
	{
		std::cout << "Receiver Action." << std::endl;
	}
};

} /* namespace NS_COMMAND */
main

#include "Command/Command.h"
#include "Command/Receiver.h"
#include "Command/ConcreteCommand.h"
using namespace NS_COMMAND;
int main(void)
{
	Receiver r;
	ConcreteCommand cc(&r);
	cc.execute();

	// 使用模板创建简单命令
	SimpleCommand<Receiver> sc(&r, &Receiver::action);
	sc.execute();
}
附加:
版权声明:本文为博主原创文章,未经博主允许不得转载。

设计模式 —— 命令模式(Command Pattern)

命令模式(Command Pattern)概念: 概述:在软件设计中,我们经常会遇到某些对象发送请求,然后某些对象接受请求后执行,但发送请求的对象可能并不知道接受请求的对象是谁,执行的是什么动作。...
  • wwh578867817
  • wwh578867817
  • 2016年05月29日 18:34
  • 1244

设计模式(行为型)之命令模式(Command Pattern)

在软件开发中,我们经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,此时,我们特别希望能够以一种松耦合的方式来设计软件,使得请求发送者与...
  • yanbober
  • yanbober
  • 2015年05月05日 11:49
  • 3167

大话设计模式 读书笔记

大话设计模式 读书笔记 着重从c#代码角度分析 学习心得: 学设计模式,不需要是否能立刻理解和记忆,无需着力首先是UML图 再从设计模式到UML图 从UML图到代码 其次知道各种模式的应用场景即可...
  • jiangdmdr
  • jiangdmdr
  • 2017年03月01日 18:50
  • 375

设计模式-----COMMAND模式

COMMAND模式是最简单,最优雅的设计模式之一。COMMAND模式的使用范围非常宽广。 COMMAND模式通过对命令的封装接触了系统的逻辑互联关系和实际连接的设备之间的耦合。简单的说就是COMMA...
  • u013812682
  • u013812682
  • 2016年11月28日 16:44
  • 396

【设计模式】《Head First 设计模式》读书笔记——命令模式

命令模式: 将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。 涉及设计原则: 1.为交互对象之间松耦合设计而努力 2.依赖抽象,不要依赖具体...
  • terry_sdy
  • terry_sdy
  • 2016年11月12日 17:45
  • 156

《Android源码设计模式解析与实战》读书笔记(二十)

第二十章、适配器模式 适配器模式是结构型设计模式之一,它在我们的开发中使用率极高,比如ListView、GridView以及RecyclerView都需要使用Adapter。 1.定义适配器模式把...
  • qq_17766199
  • qq_17766199
  • 2016年01月14日 09:17
  • 2066

【设计模式】《Head First 设计模式》读书笔记——工厂模式

工厂模式: 工厂方法模式: 定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。 抽象工厂模式: 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具...
  • terry_sdy
  • terry_sdy
  • 2016年11月07日 22:06
  • 311

设计模式之命令模式---Command Pattern

模式的定义命令模式是一个高内聚的模式,定义如下:Encapsulate a request as an object,thereby letting you parameterize clients ...
  • hfreeman2008
  • hfreeman2008
  • 2016年08月06日 10:37
  • 1584

模板方法模式(Head First设计模式 读书笔记)

模板方法模式(封装算法) 模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。类图:对模板方法进行挂钩 钩...
  • xiaofei125145
  • xiaofei125145
  • 2015年12月27日 22:49
  • 471

设计模式-command模式

定义命令模式   命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。命令对象将动作和接收者包进对象中。 应用场景   在面向对象的软件设计中...
  • u010786109
  • u010786109
  • 2015年05月19日 10:23
  • 922
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式读书笔记:Command(命令)
举报原因:
原因补充:

(最多只允许输入30个字)