[設計模式-結構型]橋接(Bridge )

來源:互聯網
上載者:User
概括

名稱

Bridge

結構

動機

將抽象部分與它的實現部分分離,使它們都可以獨立地變化。

適用性

  • 你不希望在抽象和它的實現部分之間有一個固定的綁定關係。例如這種情況可能是因為,在程式運行時刻實現部分應可以被選擇或者切換。

  • 類的抽象以及它的實現都應該可以通過產生子類的方法加以擴充。這時B r i d g e 模式使你可以對不同的抽象介面和實現部分進行組合,並分別對它們進行擴充。

  • 對一個抽象的實現部分的修改應對客戶不產生影響,即客戶的代碼不必重新編譯。

  • (C + +)你想對客戶完全隱藏抽象的實現部分。在C + +中,類的表示在類介面中是可見的。

  • 有許多類要產生。這樣一種類階層說明你必須將一個對象分解成兩個部分。R u m b a u g h 稱這種類階層為?嵌套的普化?(nested generalizations )。

  • 你想在多個對象間共用實現(可能使用引用計數),但同時要求客戶並不知道這一點。一個簡單的例子便是C o p l i e n 的S t r i n g 類[ C o p 9 2 ],在這個類中多個對象可以共用同一個字串表示(S t r i n g R e p )。

解析

形象比喻:

BRIDGE—早上碰到MM,要說早上好,晚上碰到MM,要說晚上好;碰到MM穿了件新衣服,要說你的衣服好漂亮哦,碰到MM新做的髮型,要說你的頭髮好漂亮哦。不要問我“早上碰到MM新做了個髮型怎麼說”這種問題,自己用BRIDGE組合一下不就行了

  橋樑模式:將抽象化與實現化脫耦,使得二者可以獨立的變化,也就是說將他們之間的強關聯變成弱關聯,也就是指在一個軟體系統的抽象化和實現化之間使用組合/彙總關係而不是繼承關係,從而使兩者可以獨立的變化。

    1.Abstraction
      定義抽象類別的介面。
      維護一個指向Implementor類型對象的指標。

    2.RefinedAbstraction
      擴充由Abstraction定義的介面。

    3.Implementor
      定義實作類別的介面,該介面不一定要與Abstraction的介面完全一致。
      事實上這兩個介面可以完全不同。
      一般來講,Implementor介面僅提供基本操作,而Abstraction則定義了基於這些基本操作的較高層次的操作。

    4.ConcreteImplementor
      實現Implementor介面並定義它的具體實現。

執行個體

這裡的例子是有 軟體產品和硬體產品兩類產品,與金屬封裝和塑料封裝兩類封裝。

使用橋接模式將產品類和封裝類結合起來,就可以使用四種狀況了:

軟體金屬封裝

軟體塑料封裝

硬體金屬封裝

硬體塑料封裝

涉及的檔案有:

Product.java

  -- SoftwareProduct.java

  --  HardwareProduct.java

Package.java

  -- MetalPackage.java

  -- PlasticPackage.java

TestMain.java

/**    * @author oscar999    * @date 2013-7-24 * @version V1.0    */package designptn.bridge;public abstract class Product {private String type;/** * @return the type */public String getType() {return type;}/** * @param type *            the type to set */public void setType(String type) {this.type = type;}}

/**    * @author oscar999    * @date 2013-7-24 * @version V1.0    */package designptn.bridge;public class SoftwareProduct extends Product {public SoftwareProduct() {setType("Software");}public void pack(Package package0){package0.packProduct(this);}}

/**    * @author oscar999    * @date 2013-7-24 * @version V1.0    */package designptn.bridge;public class HardwareProduct extends Product {public HardwareProduct() {setType("Hardware");}public void pack(Package package0) {package0.packProduct(this);}}

/**    * @author oscar999    * @date 2013-7-24 * @version V1.0    */package designptn.bridge;public abstract class Package {public abstract void packProduct(Product product);}
/**    * @author oscar999    * @date 2013-7-24 * @version V1.0    */package designptn.bridge;public class MetalPackage extends Package {/* * (non-Javadoc) *  * @see designptn.bridge.Package#packProduct(designptn.bridge.Product) */@Overridepublic void packProduct(Product product) {// TODO Auto-generated method stubSystem.out.println(product.getType() + " pack Metal Package");}}

/**    * @author oscar999    * @date 2013-7-24 * @version V1.0    */package designptn.bridge;public class PlasticPackage extends Package {/* * (non-Javadoc) *  * @see designptn.bridge.Package#packProduct(designptn.bridge.Product) */@Overridepublic void packProduct(Product product) {// TODO Auto-generated method stubSystem.out.println(product.getType() + " pack Plastic Package");}}
/**    * @author oscar999    * @date 2013-7-24 * @version V1.0    */package designptn.bridge;public class TestMain {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubProduct sProduct = new SoftwareProduct();Product hProduct = new HardwareProduct();Package mPackage = new MetalPackage();Package pPackage = new PlasticPackage();mPackage.packProduct(sProduct);pPackage.packProduct(sProduct);mPackage.packProduct(hProduct);pPackage.packProduct(hProduct);}}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.