Commandパターン、Strategyパターン、Stateパターンの3つはいずれも振る舞いを切り替えるパターンです。
そして、多態性を利用して振る舞いを切り替える、という意味では3つとも同じです。
それでは、これら3パターンの違いは一体何なのでしょう?
Commandパターンとは
命令を切り替えるパターン。
インタフェースは「実行する」ためのメソッドを持つ。
実際に何をどのように「実行する」か実装クラスに委ねられる。
Commandパターン
Stateパターンとは
状態を切り替えるパターン。
各状態をクラスとして持ち切り替える。
各状態に共通のメソッドはインタフェースで定義される。
「次に取りうる状態」を保持することもある。
Stateパターン
Strageパターンとは
ロジック、アルゴリズムを切り替えるパターン。
呼び出されるメソッドをインタフェースで定義し、
具体的なロジック、アルゴリズムを実装クラスに持つことで、
柔軟に切り替えられるようになる。
Strategyパターン
まとめ
その設計がどのような意図を持っているか、クラスをどのような視点で設計したのか、によって変わるものと考えて良いでしょう。
逆に、設計時に「アルゴリズムを切り替えるのか、状態を切り替えるのか、そもそもコマンドなのか」とどのような観点で設計するという判断軸にしても良いかと思います。