橋梁模式(Bridge Pattern)也稱橋接模式,是一種簡單的、不常使用的設計模式。 定義: 將抽象和實現解耦,使得兩者可以獨立地變化。 橋梁模式類圖如下所示。 橋梁模式有以下4個角色: 抽象化(Abstraction)角色:定義出該角色的行為,同時保存一個對實現化角色的引用,該角色一般是抽象類 ...
橋梁模式(Bridge Pattern)也稱橋接模式,是一種簡單的、不常使用的設計模式。
定義:
- 將抽象和實現解耦,使得兩者可以獨立地變化。
橋梁模式類圖如下所示。
橋梁模式有以下4個角色:
- 抽象化(Abstraction)角色:定義出該角色的行為,同時保存一個對實現化角色的引用,該角色一般是抽象類。
- 實現化(Implementor)角色:給出實現化角色的介面,但不給出具體實現。
- 修正抽象化(RefinedAbstraction)角色:擴展抽象化角色,它引用實現化角色並對抽象化角色進行修正。
- 具體實現化(ConcreteImplementor)角色:對實現化角色介面中的方法進行具體實現。
Implementor
// 實現化角色 public interface Implementor { // 方法的實現化聲明 public void operationImp(); }
ConcreteImplementor.java
// 具體實現化角色 public class ConcreteImplementor implements Implementor { @Override public void operationImp() { } }
Abstraction.java
// 抽象化角色 public abstract class Abstraction { // 定義對實現化角色的引用 private Implementor imp; public Abstraction(Implementor imp) { this.imp = imp; } public void operation() { this.imp.operationImp(); } }
RefinedAbstraction.java
// 修正抽象化角色 public class RefinedAbstraction extends Abstraction { public RefinedAbstraction(Implementor imp) { super(imp); } // 修正父類的方法 public void operation() { // 業務代碼 } }
Client.java
public class Client { public static void main(String[] args) { // 定義一個實現化角色 Implementor imp = new ConcreteImplementor(); // 定義一個抽象化角色 Abstraction abs = new RefinedAbstraction(imp); // 執行 abs.operation(); } }
優點:
- 抽象和實現分離是橋梁模式的主要特點,是為瞭解決繼承的缺點而提出的設計模式。在該模式下,實現可以不受抽象的約束,不用綁定在一個固定的抽象層次上。
- 實現對客戶透明,客戶端不用關心細節的實現,它已經由抽象層通過聚合關係完成了封裝。
- 提高靈活性和擴展性。
使用場合:
- 如果一個系統需要在構件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態的聯繫。
- 設計要求實現化角色的任何改變不應當影響客戶端,或者說實現化角色的改變對客戶端是完全透明的。
- 一個構件有多於一個的抽象化角色和實現化角色,系統需要它們之間進行動態耦合,
- 不希望或不適用使用繼承的場合。繼承具有強入侵性質,即父類有的方法,子類必須有;橋梁模式是弱關係聯繫。因此對於比較明確不發生變化的,則可以通過繼承完成;若不能確定是否會發生變化,則通過橋梁模式來解決。
註意:
- 使用橋梁模式主要考慮如何拆分抽象和實現,橋梁模式的意圖還是對變化的封裝,儘量把可能變化的因素封裝到最細、最小的邏輯單元中,避免風險擴散。
摘自:
青島東合信息技術有限公司 . 設計模式(Java版) . 電子工業出版社,2012,93-95.