命令模式

						命令模式

命令模式是一种对象行为型模式,是23种GOF设计模式之一。代理模式,是将一个请求封装成一个对象,从而让用户可以用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。
命令模式可以将请求发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系。发送请求的只需要知道如何让发送请求,二不必知道如何完成请求。
例子:

#include <iostream>
#include <queue>		// queue 队列
#include <Windows.h>	// Sleep() 函数
using namespace std;
// 协议处理类
class HandleClientProtocol
{
public:
	// 处理煮饭请求
	void CookRice() { cout << "电饭锅,煮饭!" << endl; }
	// 处理煮粥请求
	void CookCongee() { cout << "电饭锅,煮粥!" << endl; }
	// 处理煮汤
	void BoilSoup() { cout << "电饭锅,煮汤!" << endl; }
};

//命令接口
class AbstractCommand
{
public: virtual void handle() = 0;//处理客户端请求的接口
};

// 命令接口实现对象 :处理煮饭请求
class CookRiceCommand :public AbstractCommand
{
public:
	CookRiceCommand(HandleClientProtocol*hcp) { handleClientProtocol = hcp; }
	virtual void handle() { handleClientProtocol->CookRice(); }
public:	HandleClientProtocol * handleClientProtocol; // 接收者
};

// 命令接口实现对象 :处理煮粥请求
class CookCongeeCommand :public AbstractCommand
{
public:
	CookCongeeCommand(HandleClientProtocol*hcp) { handleClientProtocol = hcp; }
	virtual void handle() { handleClientProtocol->CookCongee(); }
public:	HandleClientProtocol * handleClientProtocol; // 接收者
};

// 命令接口实现对象 :处理煮汤
class BoilSoupCommand :public AbstractCommand
{
public:
	BoilSoupCommand(HandleClientProtocol*hcp) { handleClientProtocol = hcp; }
	virtual void handle() { handleClientProtocol->BoilSoup(); }
public:	HandleClientProtocol * handleClientProtocol; // 接收者
};

//服务器
class Server
{
public:	
	// 将命令添加到队列中
	void addResult(AbstractCommand*ac) { qCommandS.push(ac); };
	// 执行命令
	void startHandle()
	{
		while (!qCommandS.empty()) // 当命令不为空时
		{
			Sleep(1500); // 睡眠1500毫秒
			AbstractCommand * command = qCommandS.front();
			command->handle();
			qCommandS.pop();
		}
	}
public:
	queue<AbstractCommand*> qCommandS; // 队列,存放命令
};

void main()
{
	HandleClientProtocol *hcp = new HandleClientProtocol;
	AbstractCommand * amc = new CookRiceCommand(hcp);	
	AbstractCommand * aec = new CookCongeeCommand(hcp);
	AbstractCommand * alc = new BoilSoupCommand(hcp);

	Server *server = new Server;

	//将客户端的请求加入到处理的队列中
	server->addResult(amc); // 煮饭
	server->addResult(aec); // 煮粥
	server->addResult(alc); // 煮汤

	server->startHandle();  // 执行命令
}

运行结果:
在这里插入图片描述

命令模式的优缺点:
优点: 1、降低了对象之间的耦合度。
2、添加新命令的难度低。
3、设计命令组合比较容易。
缺点: 当系统中右很多的命令的时候,因为一个命令就有一个具体的类,所以会导致系统中右大量的命令类存在。

感谢您的浏览。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值