読者です 読者をやめる 読者になる 読者になる

プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

9.Bridge 機能の階層と実装の階層を分ける

機能の階層=新しい機能を追加するためのクラス階層。ネストすることが多い
実装の階層=具体的な実装を定義するクラス階層。インターフェースあるいは抽象クラスから枝分かれすることが多い
あるシステムの階層に機能と実装の階層が混じっていたらそれをBridgeパターンで分割し橋渡しする。

f:id:p-monster:20121218195201p:plain

Abstraction・・・機能のクラス階層の最上位。Implementorのメソッドを使って基本的な機能を記述。Implementorを保持
RefinedAbstraction・・・Abstractionに機能を追加
Implementor・・・実装のクラス階層の最上位。AbstractionのAPIを実装するためのメソッドを宣言
ConcreteImplementor・・・Implementorの実装

分けておけば拡張するのが楽になる。継承は固く、委譲は緩やか。
機能のクラス階層のスーパークラスが、実装のクラス階層のスーパークラスを保持(これが橋)する形。

関連しているパターン

TemplateMethod・・・実装のクラス階層を利用している。
AbstractFactory・・・ConcreteImplementorを環境に合わせて適切に構築するためにAbstractFactoryパターンが使われる場合がある
Adapter・・・Bridgeパターンは機能と実装を分離して結合させる。Adapterは機能が似ててもAPIが違う場合に仲介して結合させる。

参考:

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門