bridgeは日本語で「橋」という意味になる.Bridgeパターンは,抽象と実装を分離して,それらを独立に変更できるようにするパターンである.
一方の抽象化が他方の抽象化に依存するのではなく,実装の実装に依存する.言葉では分かりにくいが,以下の実装例を見ると少しわかりやすい.
Bridgeパターンの主な要素は以下である.
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パターンが適している状態はどういった時なのかわからまい.そもそも,各デザインパターンは独立しておらず,どれかのデザインパターンを使ったら自然と他のデザインパターンも使っていたりするのだろうか…