Strategy パターン
Strategyパターンは、
アルゴリズムの内容をクラスオブジェクトによって、
動的に入れ替えることができるようにする
デザインパターンです。
APIは一緒ですが、
中身のアルゴリズムをその時々によって変えるようにしたい場合に
使用します。
他のデザインパターンと同じように、
APIの部分は抽象インターフェースクラスで定義し、
中身の実装をTemplate Methodと同じ方法で
サブクラスで規定します。
C++によるデザインパターン3: Template Methodパターン - MY ENIGMA
あとは、それらのアルゴリズムを使用するメインクラスに
これらのサブクラスのインスタンスを持たせて、
その時々によって使用するアルゴリズムを変更させるのです。
サンプルプログラムでは、平均を計算するクラスにおいて、
平均の計算方法として相加平均と調和平均の2つのアルゴリズムを
インスタンス生成時に設定できるようにしています。
今回のサンプルではインスタンス生成時にアルゴリズムを設定していますが、
もちろん両方のインスタンスを持たせて、動的に変えることも可能です。
ちなみに今回のサンプルプログラムはC++11のvector初期化法を使っているので、
macの場合は
g++ Strategy.cpp
ではなく、
g++ -std=c++11 Strategy.cpp
でコンパイルするしないとコンパイルエラーがでると思います。
参考資料
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com