Strategyパターン vs Stateパターン

2020/12/06 08:00

GoFのStrategyパターンとStateパターンは構造が大変似通っています。しかし二つは明確な目的の違いがあるので、その差異を理解してそれぞれを適切に利用できるようになりましょう。

GoFのStrategyパターンStateパターンはクラスの構造がよく似ている形になりますが、その目的や利用イメージの差異について比較します。

目的の違い

Stateパターンは「システムの動的な状態」を複数のオブジェクトにして柔軟に切り替える為に利用します。一方Strategyパターンは「利用するロジック」を差し替え可能にする為に利用します。Strategyパターンは「サブクラス化の代替」の側面もある、より静的な概念です。

振る舞いの違い

Stateパターンは、内部で参照するオブジェクトが「現在の状態」を示すものになります。そして、その参照先を動的に切り替えるのが主な振る舞いです。対してStrategyパターンは内部で参照するオブジェクトを切り替えることがそれ程多くありません(切り替えない事の方が多いでしょう)。

構造だけに着目しなかったデザインパターン

構造だけに着目すると確かに両者が似たような形になる事はあります。しかし、この二つのパターンを分ける決定をしたデザインパターンの著者たちは「利用の目的」や「解決する課題」を中心に分類を行ったのではないでしょうか(おそらくこの2パターンをどう扱うかは議論に上がっただろうと推察できます)。

この記事を書いた人

佐藤 正志

サークルアラウンド株式会社 代表取締役

関連記事