概要
wikipedia先輩には以下のように表記されていました。
Bridge パターン(ブリッジ・パターン)とは、GoF(Gang of Four; 4人のギャングたち)によって定義されたデザインパターンの1つである。 「橋渡し」のクラスを用意することによって、クラスを複数の方向に拡張させることを目的とする。
登場人物
| 名前 | 意味 |
|---|---|
| Abstraction | 「機能のクラス階層」の最上位のクラス。Implementorのインスタンスを保持 |
| RefinedAbstraction | Abstractionに対して機能追加したクラス |
| Implementor | 「実装のクラス階層」の最上位クラス。インターフェイス(API)を規定 |
| ConcreteImplementor | 具体的なImplementor |

Bridgeパターンは機能と実装を分けることが本質なので,そこを意識しながらみていくとより理解しやすいと思います。
Abstraction・RefinedAbstractionが機能で,ImplementorとConcreteImplementorが実装です。
実装例
/// <summary> /// 機能クラス /// </summary> public class Abstraction { protected Implementor _impl; public Abstraction(Implementor impl) { _impl = impl; } public void Execute() { _impl.Execute(); } } /// <summary> /// 機能を追加したクラス /// </summary> public class RefinedAbstraction : Abstraction { public RefinedAbstraction(Implementor impl) : base(impl) { } public void Execute5times() { for (int i = 0; i < 5; i++) Execute(); } } /// <summary> /// 実装クラス /// </summary> public abstract class Implementor { public abstract void Execute(); } /// <summary> /// 実装の具象クラス /// </summary> public class ConcreteImplementor : Implementor { public override void Execute() { Console.Write("Execute"); } }
ざっくりとした私の感覚ですが、「機能の実装を委譲を用いて切り離す」というイメージでしょうか。
その上機能の追加を行いたければAbstractionのサブクラスを,実装の仕組みを変えたければImplementorを実装(継承)したクラスを作っていくというクラス設計の基本的な考え方を取り入れた感じだと思います。
またWikipediaの利用例の箇所はBridgeパターンの有用な使い方が紹介されていたので良ければ一読をしてみると面白いかもしれません。
Bridge パターン - Wikipedia
さいごに
Bridgeパターンの仕組みはStrategyパターンと全く同じで、委譲しただけのシンプルなものです。
まあそれだけ委譲(正式名称は転送?)が重要な考え方であるという見方もできるのかもしれませんね。
今回はこれくらいで。ではまた。