MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

C++によるデザインパターン10: Strategy パターン

増補改訂版 Java言語で学ぶデザインパターン入門

増補改訂版 Java言語で学ぶデザインパターン入門

オブジェクト指向における再利用のためのデザインパターン

オブジェクト指向における再利用のためのデザインパターン

  • 作者: エリックガンマ,ラルフジョンソン,リチャードヘルム,ジョンブリシディース,Erich Gamma,Ralph Johnson,Richard Helm,John Vlissides,本位田真一,吉田和樹
  • 出版社/メーカー: ソフトバンククリエイティブ
  • 発売日: 1999/10
  • メディア: 単行本
  • 購入: 21人 クリック: 711回
  • この商品を含むブログ (212件) を見る


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

でコンパイルするしないとコンパイルエラーがでると思います。

C++によるサンプルコード

下記のGitHubページにて公開しています。

cpp/Strategy.cpp at master - AtsushiSakai/cpp