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

命令模式

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
 
C++实现:
#include<iostream>
#include<string>
#include<vector>
using namespace std;


class Order {//对于命令的抽象接口
public:
    virtual void execute() = 0;
};


class Stock {//具体有行动的实体,命令作用于该实体
    string name = "ABC";
    int quantity = 10;
public:
    void buy(){
        cout<<"Stock [ Name: "<<name<<", Quantity: " << quantity <<" ] bought"<<endl;
    }
    void sell(){
        cout<<"Stock [ Name: "<<name<<", Quantity: " << quantity <<" ] sold"<<endl;
    }
};



class BuyStock :public Order {//具体的命令
    Stock* abcStock;
public:
    BuyStock(Stock* abcStock){
        this->abcStock = abcStock;
    }

    void execute() {
        abcStock->buy();
    }
};



class SellStock :public Order {//具体的命令
    Stock* abcStock;
public:
    SellStock(Stock* abcStock){
        this->abcStock = abcStock;
    }

    void execute() {
        abcStock->sell();
    }
};




class Broker {//命令管理类用于存储命令并统一执行
    vector<Order*> orderList;
public:
    void takeOrder(Order* order){
        orderList.push_back(order);      
    }

    void placeOrders(){
        for (auto order : orderList) {
            order->execute();
        }
        orderList.clear();
    }
};



class CommandPatternDemo {
public:
    static void method() {
        Stock* abcStock = new Stock();

        BuyStock* buyStockOrder = new BuyStock(abcStock);
        SellStock* sellStockOrder = new SellStock(abcStock);

        Broker* broker = new Broker();//命令管理对象
        broker->takeOrder(buyStockOrder);
        broker->takeOrder(sellStockOrder);

        broker->placeOrders();//执行命令!
    }
};



int main(int argc,char**argv){
    CommandPatternDemo::method();
}

类图:

../_images/Command.jpg

命令模式适用于对于对象存在批量操作,而且需要把一系列操作抽象出来并执行的场合。有点像事务的意思。

转载于:https://www.cnblogs.com/J1ac/p/9695936.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值