l

2013年5月16日 星期四

讀Clean Code有感:Adapter的另類用途

May 14 18:09~19:03

imageimage

圖片來源:維基百科

Adapter這個設計模式,在GoF書中提到的用途是:Convert the interface of a class into another interface clients expect(將一個類別的介面轉成另一個客戶端所期待的介面),使用時機通常是有一個Apaptee物件已經存在,它的功能可以符合鄉民的需要,但是介面與client所期待的有出入。因此藉由新增一個Adaptor類別,讓它的介面可以符合client的要求,但是功能面的實作則是直接委託的Adaptee就可以了。

***

GoF書中所提到的另一種Adapter叫做Pluggable Adapter,這個設計模式在SWT/JFace與Android UI元件都有使用到。使用Pluggable Adapter的情境剛好和Adapter相反,client端的介面固定(例如Tree的使用者介面元件,其提供的操作介面是固定的),但是真正餵給client的資料來源(Adaptee)可以有很多種。為了讓多種的資料來源可以被client接受,因此要使用這個client的人就必須要提供一個Adapter(又稱為Provider),來轉換不同的資料內容的操作介面。

螢幕快照 2013-05-14 下午6.22.27

***

以上兩種Adapter是大家比較常見的應用情境,在Clean Code的第八章提到可以利用Adapter來使用「尚未存在的程式」,以便加速團隊的軟體開發。假設鄉民們的團隊需要使用到另一個團隊開發的API X,但是由於其他團隊還沒把API X設計完成,而鄉民們也不能一直等下去,因此就先設計自己的API Y介面,讓程式開發活動可以進行下去。

問題來了,等到另一個團隊把API X實作完成之後,發現跟API Y的介面不甚相容,因此不能直接用API X來取代API Y。這時候Adapter便可派上用場,透過Adapter來轉介API X與API Y。

螢幕快照 2013-05-14 下午7.00.22

 

眼尖一點的鄉民不知道有沒有發現到,其實書中的例子就是Pluggable Adapter的應用,只是在書中用來當作隔離團隊開發邊界的一種方法,而一般較常見的Pluggable Adapter則是被使用在可重複使用的UI元件之中。

***

友藏內心獨白:Adapter真的還滿好用的。

1 則留言: