ソフトウェア開発メモ

日々のソフトウェア設計、実装で考えている、気づいた事を書いています。それが真実か否かは保証しません。悪しからず。

Bridgeパターンについて再考

 最も使えそうなパターンの割に、いままで誤解していたBridgeパターンについていろいろ可能性を探ってみます。

 まず、図のようにAbstractionがImplementorの差し込み以外全部ファイルメソッドかつImplementorの具現クラスが全部ファイナルクラスの場合は継承+テンプレートメソッドのやり方と余り変わらないでしょう? 

コンストラクタに渡す引数で変化を付けるというやり方もありますが。

f:id:objectiveworker:20141005073437p:plain

図のように2つのImplementorを渡す場合はBridgeパターンの利点が生きてきます。ただ、インタフェースを切り分けるかが難しいかも。

f:id:objectiveworker:20141005073450p:plain

図のようにBridgeのBridgeという場合、さらに利点が生きてくるでしょう。ただ、ネストが3つを超えると頭がねじれるのでこれが限界ですな。

f:id:objectiveworker:20141005073515p:plain

しかし、GOF本で取り上げている例は悪過ぎる。マルチプラットホームとか特別なシステムを作っている人向けという印象しか与えない。普通の継承回避&サブクラス間のコード共有テクニックとして紹介してくれれば良かったのに。