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.

ブリッジデザインパターンは、抽象化と実装の両方に独立した階層が存在し、クライアントアプリケーションから実装を隠したい場合に使用できる。

コメントを残す 0

Your email address will not be published. Required fields are marked *