コンテンツにスキップ

Bridge

抽象化と実装を分離し、両方を独立して拡張できるようにするパターンです。

  • 入力デバイス実装を操作ロジックから分離したいとき
  • プラットフォーム別バックエンド実装を差し替えたいとき
  • Abstraction
  • Implementor
  • Concrete Implementor

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

using UnityEngine;
public interface IInputReader
{
Vector2 ReadMovement();
}
public sealed class KeyboardInputReader : IInputReader
{
public Vector2 ReadMovement()
{
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
return new Vector2(horizontal, vertical);
}
}
public sealed class CharacterMovementController
{
private readonly IInputReader inputReader;
public CharacterMovementController(IInputReader inputReader)
{
this.inputReader = inputReader;
}
public Vector2 GetMoveDirection() => inputReader.ReadMovement();
}
  • モジュール境界が明確になり、結合度を下げられます。
  • 既存コードを変更せずに機能拡張や統合がしやすくなります。
  • ラッパー層が深くなりすぎるとデバッグが難しくなります。
  • 責務境界が曖昧にならないよう、インターフェースは小さく保つべきです。

抽象化と実装を分離し、それぞれを独立に拡張する委譲の流れです。

Bridge の流れ