設計模式之6 橋接模式和adapter模式

來源:互聯網
上載者:User

1.    橋接模式就是bridge模式。

簡單的來說,就是一個類如果想往兩個維度擴充,就用耦合來代替繼承關係,進行排列組合

 

所謂耦合就是在一個類當中持有另外一個類的對象。

通過耦合和繼承相結合,就可以排列組合出各種情況。

Bridge模式是為瞭解決類的層次和結構過於複雜的問題,而提出的。

 

 

類與類的關係:

1.      如果一個類的對象是另外一個類的成員變數,表示這個類是另外一個類的一部分。

2.      類的對象也可以作為另外一個類的方法的參數。

分析,如果一個類的對象是另外一個類的成員變數,耦合度很高。修改維護成本高。如果類的對象也可以作為另外一個類的方法的參數,相對來說耦合度低一些。

 

彙總關係:

1.      GiftImpl類,是禮物類型的抽象類別(flower,ring…)。

 

package com.bjsxt.dp.bridge;

 

publicclass GiftImpl {

 

}

 

package com.bjsxt.dp.bridge;

 

publicclass Flower
extends GiftImpl {

 

}

 

package com.bjsxt.dp.bridge;

 

publicclass Flower
extends GiftImpl {

 

}

 

2.      Gift類,是概念類型的抽象類別(wild,warm)。

package com.bjsxt.dp.bridge;

 

publicclass Gift {

    //彙總關係,在gift當中持有GiftImpl的對象。

    protected GiftImpl
impl;

}

 

package com.bjsxt.dp.bridge;

 

publicclass WarmGift
extends Gift{

    //WarmGift從Gift繼承,並且在構造方法提供了一個參數

    //這個參數就是來自父類的當中的一個對象

    //這個對象就是另外一個維度擴充(flower,ring...)

    public WarmGift(GiftImpl impl) {

       this.impl = impl;

    }

}

 

package com.bjsxt.dp.bridge;

 

publicclass WildGift
extends Gift {

 

    public WildGift(Ring ring) {

       this.impl =
impl;

    }

   

}

 

通過這樣的方式就可以產生不同的排列組合。當然,這個是兩個維度擴充,至於3維或者更多,暫不考慮。

 

最後看看使用者類:

package com.bjsxt.dp.bridge;

 

publicclass Boy {

    private String
name;

   

 

    public String getName() {

       returnname;

    }

 

    publicvoid setName(String name) {

       this.name = name;

    }

 

    //使用的情況

    publicvoid pursue(MM mm) {

       //溫暖的花

       Gift g1 = new WarmGift(new Flower());

       //狂野的戒指

       Gift g = new WildGift(new Ring());

       //give(g, mm);

    }

   

    publicvoid give(Gift g, MM mm) {

      

    }

}

 

 

2.    adapter模式就是一個轉接器,提供了一個轉換的介面。感覺有點像個變壓器。

通常都有一個輸入和一個輸出。一個典型的應用就是:JDBC-ODBC橋。

典型的應用,就是inputstreamReader類,和outputstreamWriter類。能把inputStream轉換成為Reader,outputStream轉換成為writer。

下面說下在awt當中的adapter,從功能上來說,Adapter和Listener功能是重複的,但是listener是個介面,如果要實現listener介面,需要實現介面當中的所有的方法。比如說,在mouselistenter有mouseClicked, mouseEntered, mouseExited, mousePressed, mouseReleased六個方法。為了可以不用寫Listener當中所有的方法。我們可以選擇使用adapter介面。Adapter是個類,而listener是介面。Adapter實現了Listener介面。所以使用adapter的時候,不需要寫哪些不想實現的方法。可以唯寫需要實現的介面。所以adapter的意義在於方便使用者添加listener,如果不想實現listener,就添加一個adapter,同樣可以完成任務。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.