文章

设计模式之命令模式

设计模式之命令模式

设计模式之命令模式

简介

命令模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

命令模式的 UML 类图:

commandPatten

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 进行授权