どんなもの?
Template Methodと似ているが、Template Methodは処理をサブクラスに任せるのに対して、Strategyでは処理を委譲する。
どういうときに使う?
例
典型的な構成要素
- Strategy
- ConcreteStrategyA
- ConcreteStrategyB
- Context
コード
#include <iostream> #include <string> #include <vector> using namespace std; class Strategy{ public: virtual int calc(const int &a, const int &b) = 0; }; class AddStrategy: public Strategy{ int calc(const int &a, const int &b){ return (a + b); } }; class SubStrategy: public Strategy{ int calc(const int &a, const int &b){ return (a - b); } }; class Calculator{ public: Calculator(Strategy *strategy){ this->strategy = strategy; } int calc(const int &a, const int &b){ return strategy->calc(a, b); } private: Strategy *strategy; }; int main(){ Calculator c(new AddStrategy()); cout << c.calc(1, 2) << endl; return 0; }