模式 / 行为模式
image

#include <iostream>
using namespace std;

class Strategy {
public:
    virtual int doOperation(int a, int b) = 0;
};

//ConcreteStrategy
class AddStrategypublic Strategy {
public:
    int doOperation(int a, int b) {
        return a + b;
    }
};

//ConcreteStrategy
class SubstractStrategypublic Strategy {
public:
    int doOperation(int a, int b) {
        return a - b;
    }
};

//Context
class Calc {
    Strategy* strategy = NULL;

public:
    int execute(int a, int b) {
        if (strategy == NULL)
        return 0;
        return strategy->doOperation(a, b);
    }

    void setStrategy(Strategy* strategy) {
        this->strategy = strategy;
    }
};

Calc calc;
int result1 = calc.execute(53);
//result1 is 0

calc.setStrategy(new AddStrategy());
int result2 = calc.execute(53);
//result2 is 8

calc.setStrategy(new SubstractStrategy());
int result3 = calc.execute(53);
//result3 is 2

cout << "result1 is " << result1 << endl;
cout << "result2 is " << result2 << endl;
cout << "result3 is " << result3;