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

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模式使得事件之间的耦合得到解除,在系统调用命令是有很重要的意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值