Java橋接模式(Bridge)-結構型
阿新 • • 發佈:2019-02-02
意圖
將抽象化與實現化解耦,使二者可以獨立地變化。
類圖與角色
抽象化角色(Abstraction):定義抽象化的介面。並儲存一個對Implementor物件的引用。
修正抽象化角色(Refined Abstraction):改變和修正Abstraction對抽象化的定義。
實現化角色(Implementor):定義實現化的介面。必須指出的是,這個介面不一定與抽象化的介面定義相同,實際上,這兩個介面可以完全不同。實現化應當只給出底層操作,而抽象化應當只給出基於底層操作的更高層次的操作。
具體實現化角色(Concrete Implementor):對Implementor介面的具體實現。
例項:
public class Abstraction{ protected Implementor impl; public void operation(){ //將客戶端操作委派給實現化物件 impl.operationImpl(); } } public class RefinedAbstraction extends Abstraction{ @Override public void operation(){ System.out.println("增強處理"); super.operation(); System.out.println("增強處理"); } } public interface Implementor{ public void operationImpl(); } public class ConcreteImplementorA implements Implementor{ @Override public void operationImpl(){ System.out.println("底層操作"); } } public class ConcreteImplementorB implements Implementor{ @Override public void operationImpl(){ System.out.println("底層操作"); } }
例項
JDBC驅動器
大多數的驅動器(Driver)都是橋樑模式的應用。使用驅動器的應用系統就是抽象化角色,而驅動器本身扮演實現化角色。
JDBC為所有的關係資料庫提供了通用的介面,JDBC API(應用系統)可以動態地選擇一個合適的驅動器,然後通過驅動器向資料庫引擎發出指令。這個過程就是將抽象化角色的行為委派給實現化角色的過程。
抽象化角色(JDBC API)可以針對任何資料庫引擎發出查詢指令,因為抽象化角色不直接與資料庫引擎打交道,JDBC驅動器(實現化角色)負責這個底層工作。由於JDBC驅動器的存在,應用系統(JDBC API)可以不依賴於資料庫引擎的細節而獨立地演化。同時資料庫引擎也可以獨立於應用系統的細節而獨立演化。
應用程式建立在JDBC API這個抽象化角色的基礎之上。
遙控器-電視
適用場景
如果一個系統需要在構件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態的聯絡。
設計要求實現化的任何改變不應當影響客戶端,或者說實現化的改變對客戶端是完全透明的。
一個構件有多於一個的抽象化角色和實現化角色,系統需要他們之間進行動態耦合。