您的位置:首页 > 其它

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

2016-11-28 16:44 375 查看
COMMAND模式是最简单,最优雅的设计模式之一。COMMAND模式的使用范围非常宽广。

COMMAND模式通过对命令的封装接触了系统的逻辑互联关系和实际连接的设备之间的耦合。简单的说就是COMMAND模式可以在让对象调用时不关心调用者,而直接执行命令。

COMMAND的另一个用法是创建和执行事务操作,比如在数据库的表中新建一个记录,我们可以用COMMAND对象验证输入数据库中的数据是否正确,并且执行对数据库的导入。

举个例子:

我们外出需要使用滴滴打的,我们在滴滴APP创建订单,滴滴发布消息通知司机,滴滴司机选择抢单或者忽略,我们并不确定谁将会把我们带往目的地,我们可以撤销订单,更换目的地等操作,但是我们不确定,我们命令的执行者是谁。

实例:

#include<iostream>
#include<vector>

using namespace std;

class Driver
{
public:
void RushOrder() { cout << "马上到达"; }
void IgnoreOrder() { cout << "忽略订单"; }
};
class Command
{
public:
Command(Driver* tmp) { driver_ = tmp; }
virtual void EexecuteCmd() = 0;

protected:
Driver* driver_;
};
class RushOrderCmd :public Command
{
public:
RushOrderCmd(Driver* tmp) :Command(tmp) {}
virtual void EexecuteCmd() { driver_->RushOrder(); }
};
class IgnoreOrderCmd :public Command
{
public:
IgnoreOrderCmd(Driver* tmp) :Command(tmp) {}
virtual void EexecuteCmd() { driver_->IgnoreOrder(); }
};
class Didi
{
public:
void SetCmd(Command* tmp)
{
com_ = tmp;
};
void Notify() { com_->EexecuteCmd(); };
protected:
Command* com_;
};

int main()
{
Driver* dri_ = new Driver();
Command* cmd_=new RushOrderCmd(dri_);
Command* cmd2_=new IgnoreOrderCmd(dri_);

Didi* didi_=new Didi();

didi_->SetCmd(cmd_);
didi_->SetCmd(cmd2_);

didi_->Notify();
cin.get();
return 0;
}


COMMAND模式使得事件之间的耦合得到解除,在系统调用命令是有很重要的意义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式