Design Pattern 軟體工程與哲學

Design Pattern 設計模式學習筆記 (二)

本文會依序介紹 Adapter, Bridge, Composite, 與 Decorator patterns. 各自的內容會分別以使用時機, 架構, 實作相關(optional)來描述.

1. Adapter Pattern
使用時機: 現有模組介面不完全 fit in 現有架構或未來架構規劃. 另一說法就是更改現有模組介面.

Adapter pattern 的參與 class 為 Target, Adapter, Adaptee. Client 擁有或操作 Target, Adapter 則負責將 Adaptee 的介面轉換成符合 Target 的介面. Adapter pattern 分為兩種架構: 多重繼承的架構為 class adapter, 另一種則為 object adapter. class adapter 同時繼承於 Target 與 Adaptee, 由於是繼承關係, class adapter 較易更改 Adaptee 內部行為. 然而 object adapter 則是包含 (has or can access) Adaptee, 同時繼承於 Target, 所以較強調 Adaptee 的封裝完整. [1] 中有補充 class adapter 無法處理有 sub-classes 的 Adaptee (adapt 其 sub-classes); 關於 object adapter 的是其可以擁有多個 Adaptee.

另外 [1] 中提到利用 class adapter 的架構, AdapteeTarget 的角色可互換, 達到雙向 adapt 的功用.

實作須知: class adapter 的做法基本上要 public 繼承 Target, private 繼承 Adaptee.


2. Bridge Pattern
使用時機: 將 base class 的某些 method 拉出來由另一繼承樹實作.

架構範例:

 


3. Composite Pattern
使用時機: 待處理的物件們可以畫成 Composite-Leaf 樹狀圖.

參與 class 為 Component, CompositeLeaf. CompositeLeaf 皆繼承 Component, client 只調用 Component 的介面, 另外 Composite 中包含了多個 Component (可以是 Composite 或 Leaf ).


4. Decorator Pattern
使用時機: 須要動態對一物件的某一功能做增強時.

架構範例 (此 pattern 與 Composite Pattern 有幾分相似, 可以比較一下)

 

References
[1] “Design Patterns”, Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。