Java 中的橋接設計模式

今天我們將在Java中研究橋接模式。當介面層次結構中既有介面又有實現時,使用橋接模式可以將介面從實現解耦,並將實現細節隱藏在客戶端程序中。

橋接模式

就像適配器模式一樣,橋接模式是結構型設計模式之一。根據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 {
	//組合 - 實現者
	protected Color color;
	
	//以實現者作為輸入參數的構造函數
	public Shape(Color c){
		this.color=c;
	}
	
	abstract public void applyColor();
}

我們有以下三角形和五邊形的實現類。 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.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