#include <iostream>
class CalculateBehavior{
public:
virtual double calculate(double a,double b) = 0;
};
class AddCalculate : public CalculateBehavior{
public:
double calculate(double a,double b) override{
return a + b;
}
};
class SubtractionCalculate : public CalculateBehavior{
public:
double calculate(double a,double b) override{
return a - b;
}
};
class Calculate{
public:
Calculate(double a,double b,CalculateBehavior * calculateBehavior) : _a(a),_b(b) ,_calculateBehavior(calculateBehavior){}
double retCalculateValue(){
return _calculateBehavior->calculate(_a,_b);
}
void setCalculateBehavior(CalculateBehavior * calculateBehavior){
_calculateBehavior = calculateBehavior;
}
private:
double _a;
double _b;
CalculateBehavior * _calculateBehavior = nullptr;
};
int main(int argc,char * argv[]){
SubtractionCalculate subtractionCalculate;
AddCalculate addCalculate;
auto c = Calculate(7,9,&subtractionCalculate);
std::cout << "[1] " << c.retCalculateValue() << std::endl;
c.setCalculateBehavior(&addCalculate);
std::cout << "[2] " << c.retCalculateValue() << std::endl;
return 0;
}
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。
策略模式总共由三部分组成,分别是:
- 持有行为的对象。对应到我们上面的代码中就是
CalculateBehavior * _calculateBehavior = nullptr;
- 策略接口。声明了所有支持的算法的公共接口,对应到代码中的
CalculateBehavior
类 - 具体策略。每个具体策略都实现了策略接口所定义的行为。