定义:定义一组算法,将每个算法封装起来,并且使他们之间可以互换。
策略模式使用的就是面向对象的继承和多态机制。
优点:1、算法可以自由切换
2、避免使用多重条件判断
3、扩展性良好
缺点:1、策略类数量增多
2、所有策略类都需要向外暴露
using namespace std; //策略抽象类 class CalculateStrategy { public: CalculateStrategy() {} ~CalculateStrategy() {} virtual void Cal() = 0; }; //加法策略 class AddStrategy : public CalculateStrategy { public: AddStrategy(int a, int b) { this->a = a; this->b = b; } ~AddStrategy() {} void Cal() { printf("%d + %d = %d ", a, b, a + b) ; } private: int a; int b; }; //减法策略 class SubStrategy : public CalculateStrategy { public: SubStrategy(int a, int b) { this->a = a; this->b = b; } ~SubStrategy() {} void Cal() { printf("%d - %d = %d ", a, b, a - b); } private: int a; int b; }; /////////////////////////////////// //可以添加n个策略。。。。 ///////////////////////////////// //所有策略进行封装 class Context { public: Context(CalculateStrategy *cal) { this->cal = cal; } ~Context() {} void Cal() { cal->Cal(); } private: CalculateStrategy *cal; }; int main() { AddStrategy add(3, 5); SubStrategy sub(9, 6); Context *context; context = new Context(&add); context->Cal(); context = new Context(&sub); context->Cal(); }