第22章

小A:“使用一個已經存在的類,如果它的接口,方法和你的要求不相同的時候,可以考慮用適配器模式嗎?”

大B:“可以啊!如果兩個類所做的事情相同或相似,但是他們有不同的接口的時候要使用它。類都是共享同一個接口,那你想客戶代碼要怎麽樣才行?”

小A:“客戶代碼隻要統一調用同一接口就行了,是不是這樣簡單,直接,更緊湊?”

大B:“是的,軟件都是需要維護的,維護可能會因不同的開發人員,不同的產品,不同的廠家,造成功能類似但是接口不同,這時就可以使用適配器。”

小A:“你是說,在軟件開發後期或維護的時候再考慮使用適配器?”

大B:“在設計階段沒必要把類似的功能類的接口設計的不同。”

小A:“可是不同的程序員定義方法的名稱也可能是不同的呀!”

大B:“那也是,但是在一般公司內部,類和方法的命名是有規範的,做好前期就設計,接口不相同的時候,第一時間不應該考慮用適配器,而是考慮通過重構統一接口。”

小A:“也就是說要在雙方都不太容易修改的時候,這個時候再使用適配器模式適配?不是一出現不同時就使用它?會不會有在設計初就考慮用適配器模式的情況哩?”

大B:“有,就好像在設計一個係統時使用第三方開發組件,這個組件的接口與係統接口不相同,這個時候就不用為了迎合它去改動自己的接口,在這種情況下,雖然是在開發設計階段,解決接口不同的問題也可以用適配器模式。”

小A:“這樣呐!”

大B:“有人舉過這樣一個例子:虎與飛禽是沒有直接關聯的兩類動物,但是現在出來了個‘飛虎’,它同時具有虎肉食動物跟飛禽會飛的特質,要在飛禽這個類係中添加一個成員類‘飛虎’,除了直接實現‘飛虎’類,還有一種簡單的辦法是實現一個Adapter類,在其中包容一個虎的對象,同時實現飛禽的接口即可。當然,對於這個問題,多繼承或者實現多接口可能是一個更直觀的作法,在實際應用中,可視具體需要確定采用何種作法。”