命令模式
在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式
#pragma once
#include <iostream>
#include <vector>
#include <string>
#include <Windows.h>
using namespace std;
//命令模式
//接收执行者
class Receiver
{
public:
void Do() { cout << "干活" << endl; }
};
//命令
class Command
{
public:
virtual void Execute() = 0;
};
//真正的命令派生
class realCommand : public Command
{
private:
Receiver* receiver;
public:
realCommand(Receiver* r):receiver(r){}
virtual void Execute()
{
receiver->Do();
}
};
//请求者
class Requester
{
private:
Command* command;
public:
Requester(Command* com):command(com){}
void ExecuteCommand() { command->Execute(); }
};
int main()
{
Receiver receiver;
realCommand com(&receiver);
Requester request(&com);
request.ExecuteCommand();
system("pause");
return 1;
}
优点
1.降低对象之间的耦合度。
2.新的命令可以很容易地加入到系统中。
3.可以比较容易地设计一个组合命令。
4.调用同一方法实现不同的功能