一、源代码
#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();
}
二、运行结果