Dyuichi Blog

オブジェクト指向シリーズⅣ: デザインパターン [⑨ Bridge]

概要

bridgeは日本語で「橋」という意味になる.Bridgeパターンは,抽象と実装を分離して,それらを独立に変更できるようにするパターンである.

一方の抽象化が他方の抽象化に依存するのではなく,実装の実装に依存する.言葉では分かりにくいが,以下の実装例を見ると少しわかりやすい.

Bridgeパターンの主な要素は以下である.

  • Abstraction:抽象クラス
  • RefinedAbstraction:Abstractionの派生クラス
  • Implementor:Abstractionの実装部分のインターフェース
  • ConcreteImplementor:Implementerの実装クラス

クラス図

画像が読み込まれない場合はページを更新してみてください。

実装例(Java)

java// Implementor
interface Implementor {
    void operationImpl();
}

// Concrete Implementor
class ConcreteImplementorA implements Implementor {
    @Override
    public void operationImpl() {
        System.out.println("ConcreteImplementorA operationImpl");
    }
}

class ConcreteImplementorB implements Implementor {
    @Override
    public void operationImpl() {
        System.out.println("ConcreteImplementorB operationImpl");
    }
}

// Abstraction
abstract class Abstraction {
    protected Implementor implementor;
    public Abstraction(Implementor implementor) {
        this.implementor = implementor;
    }
    public abstract void operation();
}

// Refined Abstraction
class RefinedAbstraction extends Abstraction {
    public RefinedAbstraction(Implementor implementor) {
        super(implementor);
    }
    @Override
    public void operation() {
        implementor.operationImpl();
    }
}

// Client
public class BridgePattern {
    public static void main(String[] args) {
        Implementor implementorA = new ConcreteImplementorA();
        Implementor implementorB = new ConcreteImplementorB();
        Abstraction abstractionA = new RefinedAbstraction(implementorA);
        Abstraction abstractionB = new RefinedAbstraction(implementorB);
        abstractionA.operation();
        abstractionB.operation();
    }
}

まとめ,所感

抽象化と実装を独立できるのは,プログラムを実装してみることで理解できた.

しかし,ほかのデザインパターンではなくBridgeパターンが適している状態はどういった時なのかわからまい.そもそも,各デザインパターンは独立しておらず,どれかのデザインパターンを使ったら自然と他のデザインパターンも使っていたりするのだろうか…