【すとらてじーぱたーん】

Strategyパターン とは?

最終更新:
💡 処理のやり方を、差し替えられる部品にする

処理のやり方を共通の呼び出し口で扱い、利用する側から差し替えられるように分離するデザインパターン。たとえば同じ並べ替え処理に、点数順や名前順の比較方法を渡す。戦略の選択や設定は別に必要。

📌 このページのポイント
Strategy:比較のやり方を差し替える一覧のソート比較方法を使う手順は共通選んだ戦略例:点数順共通の呼び出し口比較方法の候補点数順名前順年齢順候補から選んだ1つを渡す選択・設定・テストも、確認しよう
比較方法を差し替える例。候補をすべて同時に実行する図ではありません。
ひよこ ひよこ
Strategyって、どこを差し替えるの?
ペンギン先生 ペンギン先生
ある処理の「やり方」を分けて、共通の呼び出し口から使うんだ。利用する側は、選んだ戦略に処理を任せる。たとえば一覧を並べるとき、点数順と名前順の比較方法を差し替えるイメージだよ。
ひよこ ひよこ
具体的なAPIにも、出てくる?
ペンギン先生 ペンギン先生
Microsoftの解説は、ソートへIComparerを渡して比較方法を選ぶ例をStrategyとして紹介している。JavaのComparatorも、比較方法をソートに渡すAPIだよ。並べ替える側の手順と、何を基準に比べるかを分離できるんだ。
ひよこ ひよこ
if文を、全部なくす方法?
ペンギン先生 ペンギン先生
分岐が必ずなくなるわけではないよ。処理ごとに分散していたやり方を、戦略としてまとめる設計だね。どの戦略を使うか決める場所や設定は必要。種類が少なく変更も少ない処理なら、単純な分岐で十分な場合もあるよ。
ひよこ ひよこ
新しい方法を足しても、何も直さなくていい?
ペンギン先生 ペンギン先生
共通の呼び出し口に合う戦略を追加すれば、利用する処理を保ちやすくなる。でも選択画面や設定への登録、入力の条件、テストは確認しよう。「新しいクラスを1つ足せば、既存のどこも変更不要」とは保証しないんだ。
ひよこ ひよこ
どこをそろえておけばいい?
ペンギン先生 ペンギン先生
入力、戻り値、エラーなど、利用する側が期待する扱いをそろえることだよ。Comparatorなら、比較の結果が順序の規則を守る必要がある。部品を差し替えられる形でも、その部品の振る舞いが合っているかを確かめるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Strategyパターン」って出てきたら「処理のやり方を、差し替えられる部品にする設計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Strategy Pattern」 = 戦略パターン
💬 Strategyは「戦略」。処理のやり方を選び、共通の呼び出し口から使うイメージだよ。

参考資料

← 用語集にもどる