設計模式Java實現(二)

適配器模式

當我們有一個可以立即使用的類時,由於不符合客戶端使用的接口時,我們需要創建一個適配器(adpter),以使當前可用的類能夠被客戶端對象使用。而在適配已有類時,存在兩種方法,一種是通過繼承的方式來適配,一種是通過引用(組合)的方式來適配,前者叫類適配,而後者加對象適配。

適配器的兩種Java實現在這裏可以下載

以下是類適配的UML類圖:


以下是對象適配的UML類圖:



構建模式

構建模式是創建模式的一種,該模式有點類似與抽象工廠模式,不同的構建對象構建不同的產品,但構建模式與抽象工廠模式不同在於,構建模式是一步步構建出被構建對象的,即產品對象。

以下是構建模式的Java實現(點擊這裏下載)。

以下是構建模式的UML類圖:




合成模式

合成模型(composite)將對象組織在樹形結構中,可以用來描述整體與局部的關係,客戶端可以將單純元素和複合元素統一看待。

這裏是合成模式Java實現的代碼下載(點擊下載

合成模式有兩種實現方式,兩種實現方式的最重要的區別就在於對非葉子節點的操作是否對客戶端透明,對客戶端透明,那麼客戶端就不會感知到葉子節點和非葉子節點的不同,那麼需要將對非葉子節點的操作定義到component接口中,但由於這些操作只是針對非葉子節點的,所以對於葉子節點是沒有任何意義的,但由於接口已經定義在了component中,所以,所有的葉子節點都將於實現一次對於自己來說沒有意義的方法。這即是透明式,以下是類設計圖:


另外一種實現方式就是區別對待葉子節點和非葉子節點,在component接口中僅僅定義了對葉子節點和非葉子節點都有意義的操作,而對非葉子節點纔有意義的操作,單獨定義在非葉子節點上。這樣實現的方式的好處是,對客戶端式安全的,不會由於在葉子節點對象上調用到不該調用的方法(這裏指定義在非葉子節點上的方法),缺點即是,客戶端會感知到存在不同的實現節點,即葉子節點和非葉子節點,以下是該實現的類設計圖:




裝飾模式

裝飾模式(Decorator)是以對客戶端透明的方式對對象功能的一種擴展,是基礎方式的一種更好的替代方案。裝飾模式的優點在於,裝飾模式擴展對象比基礎方式靈活,同時由很多小的裝飾對象,可以組合出很多不同的對象行爲。裝飾模式的優點也是其缺點,首先,由於裝飾模式比對象繼承更加靈活,所以需要產生大量的小對象,即裝飾對象本身,另外,就是由於其靈活性,導致出錯的可能性更高,不通過的裝飾結果,可能出現與預期不符的對象擴展。

裝飾模型的Java實現代碼點擊這裏下載

裝飾模式的UML類圖如下:



發佈了53 篇原創文章 · 獲贊 41 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章