kakke18’s blog

ゆるふわ学生エンジニア

Strategy-アルゴリズムをごっそり切り替える-

Java言語で学ぶデザインパターン入門 の第10章を参考にしました。

Strategyパターンとは

本書には以下のように記載されています。

アルゴリズムをカチッと切り替え、同じ問題を別の方法で解くのを容易にするデザインパターン

"strategy”には、"戦略"という意味があり、問題を解く戦略のことをアルゴリズムと表し、 それを自在に切り替えることのできるデザインパターンのことです。

実装

こちらを参考にしてください。

登場人物

  • Strategy役(Strategyインターフェース)

    戦略を利用するためのインターフェースを定める。

  • ConcreteStrategy役(WinningStrategyクラス等)

    Strategy役が定めたインターフェースを実装する。

  • Context役(Playerクラス)

    Strategy役を利用する。

実装のポイント

  • じゃんけんの勝敗判定は、グー(0)・チョキ(1)・パー(2)とし、 (this.handvalue + 1) % 3 == h.handvalue という式で行われます。
  • ProbStrategyクラスは、intの2次元配列であるhistory[一個前の手][次出す手]を過去の勝率とし、 次の手を決定します。

Strategyパターンのメリット

アルゴリズムの部分を分離しています。 つまり、委譲によってアルゴリズムを利用しているので、 プログラムの動作中にもアルゴリズムを切り替えうことが可能です。 よって、

などのようなことが可能となります。

まとめ

Strategyパターンは、アルゴリズムを委譲によって利用することで、 アルゴリズムを容易に切り替えることが可能である。