1. ホーム
  2. design-patterns

[解決済み] BridgeパターンとAdapterパターンの違い

2022-04-28 12:40:25

質問

BridgeパターンとAdapterパターンの違いは何ですか?

どのように解決するのですか?

<ブロッククオート

アダプタは設計後に動作させるものであり、ブリッジは設計後に動作させるものです。 は、その前に働く。[GoF, p219]"。

実質的には アダプタ このパターンは、サードパーティや社内に既存のコードがあるけれども、自分ではコントロールできない、あるいは必要なインターフェイスを満たすために変更することができない場合に有効です。 例えば、SuperWeaponsArrayがあり、これは終末装置の細かい配列を制御することができる。

public class SuperWeaponsArray {
  /*...*/

  public void destroyWorld() {
    for (Weapon w : armedWeapons) {
      w.fire();
    }
  }
}

素晴らしい。 しかし、私たちの武器庫には、武器インターフェイスへの変換よりもずっと前に作られた核兵器があることに気づきました。 しかし、我々はそれがここで動作するように本当にしたい...だから我々は何をすべきか...それを楔で固定する!?

NukeWeaponsAdaptor - Nuke クラスをベースとし、Weapon インターフェースをエクスポートしています。 これで、世界を破壊することができますね。 少し不便なようですが、これでうまくいきます。


その ブリッジ 直交する2つの階層があることが分かっている場合、インターフェースと実装を切り離す方法を提供し、非常識な数のクラスを作成しないようにします。 例えば、以下のようなものがあるとします。

MemoryMappedFileとDirectReadFileタイプのファイルオブジェクト。 例えば、様々なソースからファイルを読み込めるようにしたいとします(LinuxとWindowsの実装などかもしれません)。 Bridge は、このような事態を避けるために役立ちます。

メモリマップドWindowsFile メモリマップドLinuxFile 直接読み込みWindowsFile 直接読み込みLinuxFile