Bridge は、 構造に関するデザインパターンの一つで、 ビジネス・ロジックや巨大なクラスを独立して開発可能なクラス階層に分割します。
階層の一つ (抽象化と呼ばれる) は、 二つ目の階層 (実装) のオブジェクトへの参照を持ちます。 抽象化階層は、 その呼び出しのいくつか (場合によっては大多数) を実装階層のオブジェクトに委任します。 すべての実装は、 共通のインターフェースを持っているので、 抽象化の中で入れ替え可能です。
複雑度:
人気度:
使用例: Bridge パターンは、 クロス・プラットフォーム・アプリを扱う時、 複数の種類のデータベース・サーバーをサポートする時、 あるいはある種の API プロバイダー (クラウド・プラットフォーム、 ソーシャル・ネットワークなど) を複数利用したい場合に特に便利です。
見つけ方: Bridge は、 制御するものと、 それが依存するいくつかの異なるプラットフォームとが明らかに分かれていることから識別できます。
デバイスとリモート・コントロールの間のブリッジ
この例では、 複数のリモコンのクラスとそれらが制御するデバイスの間の分離を示します。
リモコン (コード例では、 Remote ) は、 抽象化階層で、 デバイスは実装階層です。 共通インターフェースのおかげで、 同じリモコンは異なるデバイスを操作でき、 逆も同様です。
Bridge パターンに従うと、 他方の層のコードを変更することなく、 クラスの変更や新規作成ができます。
devices
devices/Device.java: すべてのデバイスに共通なインターフェース
devices/Radio.java: ラジオ
devices/Tv.java: テレビ
remotes
remotes/Remote.java: すべてのリモコンに共通なインターフェース
remotes/BasicRemote.java: 基本的なリモコン
remotes/AdvancedRemote.java: 高級リモコン
Demo.java: クライアント・コード
OutputDemo.txt: 実行結果