コンテンツにスキップ

Mediator

複数オブジェクト間の相互作用を仲介オブジェクトへ集め、直接依存を減らすパターンです。

  • インベントリ、装備、ショップ UI の連携を中央制御したいとき
  • 相互参照が複雑になってきたとき
  • Mediator
  • Concrete Mediator
  • Colleague

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

public interface IUiMediator
{
void Notify(object sender, string eventId);
}
public sealed class LobbyUiMediator : IUiMediator
{
public InventoryPanel InventoryPanel { get; set; }
public EquipmentPanel EquipmentPanel { get; set; }
public void Notify(object sender, string eventId)
{
if (sender == InventoryPanel && eventId == "ItemSelected")
{
EquipmentPanel.PreviewSelectedItem();
}
}
}
  • 振る舞いを分離できるため、変更の影響範囲を小さくできます。
  • ルールの追加や差し替えを比較的安全に行えます。
  • オブジェクト数や間接呼び出しが増えると、流れを追いにくくなります。
  • 実行順序のバグはテストで固定しておく必要があります。

コンポーネント同士の直接通信ではなく、仲介者がルーティングする流れです。

Mediator の流れ