设计模式之命令模式
设计模式之命令模式
设计模式之命令模式
简介
命令模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
命令模式的 UML 类图:
Cpp 基本实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
#include <string>
#include <list>
class Stock{
public:
void buy(){
std::cout <<"Name: " << name<< " Quantity: "<< quantity<<" bought" <<std::endl;
}
void sell(){
std::cout <<"Name: " << name<< " Quantity: "<< quantity<<" sold" <<std::endl;
}
private:
std::string name = "abc";
int quantity = 10;
};
class Order{
public:
virtual void execute()=0;
};
class BuyStock : public Order {
private:
Stock* stock;
public:
BuyStock(Stock* abcStock) { stock = abcStock; }
void execute() { stock->buy(); }
};
class SellStock: public Order{
private:
Stock* stock;
public:
SellStock(Stock* abcSTock){
stock = abcSTock;
}
void execute() {
stock->sell();
}
};
class Broker{
private:
std::list<Order*> orderList;
public:
void takeOrder(Order* order){
orderList.push_back(order);
}
void placeOrder(){
for( auto& order: orderList){
order->execute();
}
orderList.clear();
}
};
int main()
{
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->placeOrder();
return 0;
}
本文由作者按照 CC BY 4.0 进行授权
