Javaにおけるブリッジデザインパターン
今日はJavaでのBridge Design Patternを調べます。インターフェイスと実装の両方にインターフェイスの階層がある場合、ブリッジデザインパターンを使用してクライアントプログラムから実装の詳細を隠し、インターフェイスを実装から切り離します。
ブリッジデザインパターン
Adapterパターンと同様に、ブリッジデザインパターンは構造デザインパターンの一つです。GoFによると、ブリッジデザインパターンとは:
抽象化を実装から切り離し、それぞれが独立して変化することができるようにする。
ブリッジデザインパターンの実装は、継承よりもコンポジションを優先するという考えに沿っています。
Javaのブリッジデザインパターンの例
例を使ってブリッジデザインパターンを考えると、理解しやすくなります。以下の画像のように、インターフェース階層と実装の両方でブリッジデザインパターンを使用して、インターフェースと実装を切り離します。ブリッジパターンを適用した後のクラスとインターフェースのUMLダイアグラムは以下の画像のようになります。ShapeとColorインターフェースの間にあるブリッジと、ブリッジパターンの実装における合成の使用に注目してください。以下にShapeとColorインターフェースのJavaコードがあります。 Color.java
package com.scdev.design.bridge;
public interface Color {
public void applyColor();
}
シェイプ.java
package com.scdev.design.bridge;
public abstract class Shape {
//Composition - implementor
protected Color color;
//constructor with implementor as input argument
public Shape(Color c){
this.color=c;
}
abstract public void applyColor();
}
以下のように、TriangleとPentagonの実装クラスを持っています。Triangle.java
package com.scdev.design.bridge;
public class Triangle extends Shape{
public Triangle(Color c) {
super(c);
}
@Override
public void applyColor() {
System.out.print("Triangle filled with color ");
color.applyColor();
}
}
ペンタゴン.java
package com.scdev.design.bridge;
public class Pentagon extends Shape{
public Pentagon(Color c) {
super(c);
}
@Override
public void applyColor() {
System.out.print("Pentagon filled with color ");
color.applyColor();
}
}
こちらは、RedColorとGreenColorの実装クラスであるRedColor.javaの実装クラスです。
package com.scdev.design.bridge;
public class RedColor implements Color{
public void applyColor(){
System.out.println("red.");
}
}
グリーンカラー.java
package com.scdev.design.bridge;
public class GreenColor implements Color{
public void applyColor(){
System.out.println("green.");
}
}
テストプログラムでブリッジパターンの実装を試してみましょう。BridgePatternTest.javaで行いましょう。
package com.scdev.design.test;
import com.scdev.design.bridge.GreenColor;
import com.scdev.design.bridge.Pentagon;
import com.scdev.design.bridge.RedColor;
import com.scdev.design.bridge.Shape;
import com.scdev.design.bridge.Triangle;
public class BridgePatternTest {
public static void main(String[] args) {
Shape tri = new Triangle(new RedColor());
tri.applyColor();
Shape pent = new Pentagon(new GreenColor());
pent.applyColor();
}
}
上記のブリッジパターンの例プログラムの出力は次のとおりです。
Triangle filled with color red.
Pentagon filled with color green.
ブリッジデザインパターンは、抽象化と実装の両方に独立した階層が存在し、クライアントアプリケーションから実装を隠したい場合に使用できる。