Design Pattern / Structural

[デザインパターン] Facade パターン

複雑なサブシステムをシンプルな上位APIで包み、使いやすさを向上させるパターンです。

  • Design Pattern
  • Structural
目次

パターンの一行要約

複雑なサブシステムをシンプルな上位APIで包み、使いやすさを向上させるパターンです。

Unityでの典型的な使用例

  • ゲームの起動シーケンスを1つのメソッドの裏に隠す場合。
  • 内部モジュールの詳細を外部から隠したい場合。

構成要素(役割)

  • Facade
  • Subsystem
  • Client

Unityサンプル(C#)

以下のコードは、上記のシナリオに基づいて簡略化したUnityのサンプルです。

public sealed class GameStartupFacade
{
    private readonly SaveSystem saveSystem = new();
    private readonly AudioSystem audioSystem = new();
    private readonly UiSystem uiSystem = new();

    public void StartGame()
    {
        saveSystem.Load();
        audioSystem.Initialize();
        uiSystem.OpenLobby();
    }
}

利点

  • モジュールの境界が明確になり、結合度を下げられます。
  • 既存コードを修正せずに機能を拡張・統合できます。

注意点

  • ラッパー層が深くなりすぎると、デバッグが困難になります。
  • 責任の境界が曖昧にならないよう、インターフェースは小さく保つべきです。

相互作用図

複雑なサブシステムの呼び出しを単一のエントリーポイントへ簡素化する流れを示しています。

flowchart LR

  client["Game Bootstrap"]
  facade["StartGameFacade"]
  assets["AssetLoader"]
  save["SaveSystem"]
  network["NetworkClient"]
  result["Ready To Play"]

  client -- "StartGame()" --> facade
  facade -->|load| assets
  facade -->|restore| save
  facade -->|connect| network
  assets --> result
  save --> result
  network --> result

コメント