Bridgeパターン:機能と実装を独立させつつ結びつけるデザインパターンをクラス図にまとめる

デザインパターン

Bridgeパターン

Bridgeパターンは、オブジェクトの生成過程を抽象化するデザインパターンです。
自分なりにBridgeパターンをクラス図にまとめてみました。

Bridgeパターンのクラス図

Bridgeパターンのクラス図

Bridgeパターンのクラス図

Bridgeパターンの解説

Bridgeパターンは、機能と実装を独立して拡張できるようにしつつ、それらを結びつけるデザインパターンです。複数の継承関係が存在する場合に、それぞれを独立して拡張できるようにすることもできます。

Abstractionというクラスがあった場合に、機能(具象メソッド)を拡張すればよい場合は、Refined1,2のように継承クラスを作成していけばよく、implFuncメソッドの実装を変更したい場合は、Implementor1,2のようにImplementorインターフェースを実装するクラスを作成していけばよい。
こうすることで作成するクラスの数を抑え、分かりやすい構成にできる。

Bridgeパターンをどういう場合に使うか

Wikipediaの例が非常に参考になった。
機能と実装を分離する、という観点ではないが、継承関係が複数にわたる場合にそれぞれを別で管理できるようにする、という考え方で、Bridgeパターンの便利な使い方であると感じた。

PlantUMLでBridgeパターンのクラス図を記述する

Bridgeパターンのクラス図をPlantUMLで書いたときのソースです。

@startuml Bridge
class Abstraction{
  - impl : Implementor
  + func() // impl.implFunc()を呼び出す
}
class Refined1 extends Abstraction{
  + func1()
}
class Refined2 extends Refined1{
  + func2()
}
interface Implementor{
  + {abstract} implFunc()
}
class Implementor1 implements Implementor{
  + implFunc()
}
class Implementor2 implements Implementor{
  + implFunc()
}
Abstraction o-r- Implementor
@enduml

参考サイトURL

Bridge パターン – Wikipedia
デザインパターン ~Bridge~ – Qiita