設計模式---結構型

     在23種設計模式中,創建型有5種,結構型有7種。這裏就簡單介紹一下結構型的7種設計模式。這7種模式是:適配器模式,裝飾器模式,代理模式,組合模式,橋接模式,外觀模式和享元模式

1.適配器模式

定義: 將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。

這個模式我在《深入分析Java Web》這本書中看過,這裏就介紹一個java裏面的例子。java.io包下的類,有兩個基類,字節流InputStream和字符流Reader,而很多類要麼支持字節流要麼支持字符流,這時就需要一個適配器來進行字節流和字符流的轉換。InputStreamReader類就是這個適配器。它負責將字節轉換爲字符。看看鍵盤輸入的一種定義: BufferedReader br=new BufferedReader(new InputStreamReader(System.in));      BufferedReader 類構造函數只支持字符流輸入,而System.in是字節輸入,所以要用適配器。

2.裝飾器模式

定義:動態地給一個對象添加一些額外的職責。其實就是給裝飾的類更多的功能。

基類InutStream是以抽象組件的形式存在;而FileInputStream是它的子類,是具體組件,實現了抽象組件的所有接口。FilterInputStream也是抽象類的子類,但它是裝飾角色,它持有InputStream的對象實例的引用。BufferedInputStream是FilterInputStream的子類,它是一個具體的裝飾器,它能使InputStream讀取的數據保存在內存中,提高讀取的性能。

3.代理模式

定義:爲其他對象提供一種代理以控制對這個對象的訪問。在某些情況下,一個客戶不想或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。

類圖如下:

代理類ProxyObject和真正的類都繼承了一個抽象的類,我們要用代理類來調用真正的類,這也算是一種複合/組合方法。代理類如下:

public class ProxyObject implements Object {

    Object obj;
    
    public ProxyObject() {
        System.out.println("這是代理類");
        obj = new ObjectImpl();
    }
    
    public void action() {
        System.out.println("代理開始");
        obj.action();
        System.out.println("代理結束");
    }
}


4.組合模式

定義:將對象組合成樹形結構以表示‘部分-整體’的層次結構。組合模式使得用戶對單個對象和組合對象的使用具有一致性。當你想表示對象的部分-整體層次結構。可以使用該模式。例子UML圖如下:


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

適用性:你不希望在抽象和它的實現部分之間有一個固定的綁定關係。例如這種情況可能是因爲,在程序運行時刻實現部分應可以被選擇或者切換;類的抽象以及它的實現都應該可以通過生成子類的方法加以擴充;這時Bridge模式使你可以對不同的抽象接口和實現部分進行組合,並分別對它們進行擴充;對一個抽象的實現部分的修改應對客戶不產生影響,即客戶的代碼不必重新編譯。

外觀模式:  爲子系統中的一組接口提供一個一致的界面。

享元模式: 運用共享技術有效地支持大量細粒度的對象。 在JAVA語言中,String類型就是使用了享元模式。String對象是final類型,對象一旦創建就不可改變。在JAVA中字符串常量都是存在常量池中的,JAVA會確保一個字符串常量在常量池中只有一個拷貝。String a="abc",其中"abc"就是一個字符串常量。


參考:

Java設計模式




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章