【デザインパターン】Strategy

どんなもの?

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;
}