今天我們將在Java中研究橋接模式。當介面層次結構中既有介面又有實現時,使用橋接模式可以將介面從實現解耦,並將實現細節隱藏在客戶端程序中。
橋接模式
就像適配器模式一樣,橋接模式是結構型設計模式之一。根據GoF的定義,橋接模式是:
將抽象與其實現解耦,使兩者可以獨立變化
Java中的橋接模式示例
如果我們以示例來看橋接設計模式,將更容易理解。假設我們在介面和實現中都有一個介面層次結構,如下圖所示。現在我們將使用橋接設計模式來將介面與實現解耦。應用橋接模式後,類和介面的UML圖將如下圖所示。
請注意
Shape
和Color
介面之間的橋樑以及實現橋接模式中的組合使用。這是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