比較轉接器模式與策略模式

使用設計模式最大的誤區就是,誤以為某個設計模式能解決自己遇到的問題。因此,了解設計模式之間的差異是很重要的。

更進階得要了解「模式(Pattern)」的抽象概念。這非常困難,留到未來理解後再分享。

今天來聊聊比較簡單的:轉接器模式(Adapter Pattern)與策略模式(Strategy Pattern)的差異。

先從畫類別圖開始

轉接器模式的基本類別圖如下:

基本形式其實跟策略模式是沒什麼關係的,而它的延伸應用為可抽換的轉接器模式(Pluggable Adapter Pattern),類別圖如下:

這個模式跟策略模式很像,類別圖如下:

解析模式

從上面兩張圖是無法看得出差異的,實際的差異在於角色的職責。

轉接器模式的職責是處理介面上的轉換,或者說,它的業務邏輯就是處理介面轉換。不同的 Adapter 會有不同的轉換邏輯,但共同的特徵是:它實作了 request(),然而真正在做 request() 這件事的並不是 Adapter,後面的 Adaptee 才是真正處理 request() 的地方。

可抽換的轉接器模式,本質不變,也是相同的。

策略模式的職責,就是實作介面所定義的 alg()。最常見的例子是演算法,比方說壓縮檔案的時候,在不同的情境使用不同的演算法(策略)。跟轉接器模式最大的差別在於,策略模式的實作就是真正處理 alg() 的地方。

區分法

目前想到最好的區分法是,通常轉接器模式的 Adaptee 是我們沒辦法控制的(所以才需要轉接)。因此在實作介面過程中,如果有辦法控制商業邏輯的話,則這是「策略模式」;反之沒辦法控制的話,則是「轉接器模式」。