标签:temp exe add code pac 分享 contex test sign
#include<iostream> using namespace std; class Strategy { public: virtual int doOperation(int num1, int num2) = 0; }; class OperationAdd :public Strategy{ public: int doOperation(int num1, int num2) { return num1 + num2; } }; class OperationSubstract :public Strategy{ public: int doOperation (int num1, int num2) { return num1 - num2; } }; class OperationMultiply :public Strategy{ public: int doOperation(int num1, int num2) { return num1 * num2; } }; class Context { Strategy* strategy; public: Context(Strategy* strategy){ this->strategy = strategy; } void setStrategy(Strategy* st){ if(this->strategy != nullptr) delete this->strategy;//注意析构 this->strategy = st; } int executeStrategy(int num1, int num2){ return strategy->doOperation(num1, num2); } }; class StrategyPatternDemo { public: static void method() { Context* context = new Context(new OperationAdd()); cout<<"10 + 5 = " << context->executeStrategy(10, 5)<<endl; context->setStrategy(new OperationSubstract()); cout<<"10 - 5 = " << context->executeStrategy(10, 5)<<endl; context->setStrategy(new OperationMultiply()); cout<<"10 * 5 = " << context->executeStrategy(10, 5)<<endl; } }; int main(int argc,char** argv){ StrategyPatternDemo::method(); }
类图:
策略模式通过更换上下文中的strategy变换上下文的行为,仔细想想和template pattern非常相像,只不过template pattern是通过继承实现局部功能变化,而strategy pattern则是通过对于strategy的组合。
标签:temp exe add code pac 分享 contex test sign
原文地址:https://www.cnblogs.com/J1ac/p/9696322.html