Strategy
Strategy
Section titled “Strategy”パターン一言説明
Section titled “パターン一言説明”同じ目的を持つアルゴリズムをインターフェースでカプセル化し、ランタイムで差し替えるパターンです。
Unity でよく使う状況
Section titled “Unity でよく使う状況”- AI 攻撃方式を状況別に切り替えたいとき
- 照準や移動方針をキャラクターごとに変えたいとき
構成要素(役割)
Section titled “構成要素(役割)”- Strategy Interface
- Concrete Strategy
- Context
Unity 例 (C#)
Section titled “Unity 例 (C#)”以下のコードは、上で説明した状況を Unity プロジェクトの文脈で単純化した例です。
using UnityEngine;
public interface IAimStrategy{ Vector3 GetAimPosition(Transform shooterTransform, Transform targetTransform);}
public sealed class DirectAimStrategy : IAimStrategy{ public Vector3 GetAimPosition(Transform shooterTransform, Transform targetTransform) { return targetTransform.position; }}
public sealed class LeadAimStrategy : IAimStrategy{ public Vector3 GetAimPosition(Transform shooterTransform, Transform targetTransform) { return targetTransform.position + targetTransform.forward * 0.5f; }}- 振る舞いを分離できるため、変更の影響範囲を小さくできます。
- ルールの追加や差し替えを比較的安全に行えます。
- オブジェクト数や間接呼び出しが増えると、流れを追いにくくなります。
- 実行順序のバグはテストで固定しておく必要があります。
動作ダイアグラム
Section titled “動作ダイアグラム”コンテキストが Strategy インターフェースを通してアルゴリズムを切り替える流れです。