JavaでのBridgeデザインパターン

本日は、Javaにおけるブリッジデザインパターンを探究します。インターフェースと実装の両方でインターフェースの階層がある場合、ブリッジデザインパターンはインターフェースを実装から切り離し、クライアントプログラムから実装の詳細を隠すために使用されます。

ブリッジデザインパターン

アダプターパターンと同様に、ブリッジデザインパターンは構造設計パターンの1つです。GoFによると、ブリッジデザインパターンは次のとおりです:

抽象化と実装を切り離して、それらが独立して変化できるようにする

ブリッジデザインパターンの実装は、合成継承よりも好むという概念に従います。

Javaにおけるブリッジデザインパターンの例

もし例を交えてブリッジデザインパターンを見ると、理解が容易になります。インターフェース階層があり、両方のインターフェースと実装で例を挙げてみましょう。以下の画像をご覧ください。次に、ブリッジデザインパターンを使用して、インターフェースを実装から切り離します。ブリッジパターンを適用した後のクラスとインターフェースのUMLダイアグラムは以下の画像のようになります。 ShapeColorインターフェース間のブリッジと、ブリッジパターンの実装での合成の使用に注意してください。以下はShapeとColorインターフェースのJavaコードです。Color.java

package com.journaldev.design.bridge;

public interface Color {

	public void applyColor();
}

Shape.java

package com.journaldev.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.journaldev.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();
	} 

}

Pentagon.java

package com.journaldev.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.journaldev.design.bridge;

public class RedColor implements Color{

	public void applyColor(){
		System.out.println("red.");
	}
}

GreenColor.java

package com.journaldev.design.bridge;

public class GreenColor implements Color{

	public void applyColor(){
		System.out.println("green.");
	}
}

テストプログラムでブリッジパターンの実装をテストしましょう。BridgePatternTest.java

package com.journaldev.design.test;

import com.journaldev.design.bridge.GreenColor;
import com.journaldev.design.bridge.Pentagon;
import com.journaldev.design.bridge.RedColor;
import com.journaldev.design.bridge.Shape;
import com.journaldev.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.

{
“error”: “Upstream error…”
}

Source:
https://www.digitalocean.com/community/tutorials/bridge-design-pattern-java