コンテンツにスキップ

TemplateMethod

全体手順は固定し、細部のステップだけをサブクラスで変えるパターンです。

  • スキル実行順序は同じで、効果だけが異なるとき
  • 共通の前処理 / 後処理を強制したいとき
  • Template Method
  • Primitive Operation
  • Concrete Class

以下のコードは、上で説明した状況を Unity プロジェクトの文脈で単純化した例です。

public abstract class SkillExecutionTemplate
{
public void Execute()
{
if (!CanExecute())
{
return;
}
ConsumeCost();
PlayCastAnimation();
ApplyEffect();
}
protected virtual bool CanExecute() => true;
protected virtual void ConsumeCost() { }
protected virtual void PlayCastAnimation() { }
protected abstract void ApplyEffect();
}
public sealed class HealSkillTemplate : SkillExecutionTemplate
{
protected override void ApplyEffect()
{
// Heal target.
}
}
  • 振る舞いを分離できるため、変更の影響範囲を小さくできます。
  • ルールの追加や差し替えを比較的安全に行えます。
  • オブジェクト数や間接呼び出しが増えると、流れを追いにくくなります。
  • 実行順序のバグはテストで固定しておく必要があります。

親がアルゴリズム順序を固定し、一部ステップだけを子が変更する流れです。

Template Method の流れ