C++设计模式:命令模式

一、源代码

#include<iostream>
#include<memory>
#include<vector>

using namespace std;

class Order
{
public:
    virtual void execute() = 0;
    virtual ~Order() = default;
};

class Stock
{
public:
    Stock()
    {
        _name = "ABC";
        _quantity = 10;
    }
    void buy()
    {
        cout<<"Stock [Name: "<<_name<<",Quantity: "<<_quantity<<"] bought"<<endl;
    }
    void sell()
    {
        cout<<"Stock [Name: "<<_name<<",Quantity: "<<_quantity<<"] sold"<<endl;
    }
private:
    string _name;
    int _quantity;
};

class BuyStock:public Order
{
public:
    BuyStock(shared_ptr<Stock> abcStock)
    {
        this->_abcStock = abcStock;
    }
    virtual void execute() override
    {
        _abcStock->buy();
    }
private:
    shared_ptr<Stock> _abcStock;
};

class SellStock:public Order
{
public:
    SellStock(shared_ptr<Stock> abcStock)
    {
        this->_abcStock = abcStock;
    }
    virtual void execute() override
    {
        _abcStock->sell();
    }
private:
    shared_ptr<Stock> _abcStock;
};

class Broker
{
public:
    void takeOrder(shared_ptr<Order> order)
    {
        _orderVector.push_back(order);
    }
    void placeOrder()
    {
        for(const auto& order:_orderVector)
        {
            order->execute();
        }
        _orderVector.clear();
    }
private:
    vector<shared_ptr<Order>> _orderVector = {};
};

int main()
{
    shared_ptr<Stock> abcStock= make_shared<Stock>();

    shared_ptr<Order> buyStockOrder = make_shared<BuyStock>(abcStock);
    shared_ptr<Order> sellStockOrder = make_shared<SellStock>(abcStock);

    shared_ptr<Broker> broker= make_shared<Broker>();
    broker->takeOrder(buyStockOrder);
    broker->takeOrder(sellStockOrder);

    broker->placeOrder();
}

二、运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值