Abstract
在OO設計裡,我們常會定下interface要求其他class必須實現此interface,以便彼此溝通,若是新開發的專案,問題就不大;若既有的framework/library中,已經有符合需求的class,但唯一可惜的是,『因為interface並不相同』,導致無法和我的class合作,此時可使用Adpater Pattern解決。
Intent
將class的interface轉換成外界所預期的另一種interface,讓原先囿於interface不相容問題而無法協力合作的class能夠兜再一起用[1]。
Introduction
adapter中文為轉換器、轉接器,主要的目的就是將不相容的interface做轉換。現實生活中,處處可以看到adapter,如Notebook內部使用的是DC(直流電),但插頭提供的是AC(交流電),所以必須使用AC to DC adapter將交流電轉換成直流電,Notebook才能使用;又如現在很多Notebook並沒有COM port,取而代之的是USB port,但很多嵌入式系統開發版必須使用COM port才能與PC連接,因此就有USB to COM的adapter,讓Notebook可以和開發版做連接。OO設計也是如此,若interface不相容,則可透過Adapter Pattern解決。
Structure[1]
Class Adapter (使用繼承技術)
Object Adapter (使用組合技術)
Participants[1]
ClIEnt
與符合ITarget interface的object合作。
ITarget
定義ClIEnt所用的與應用領域相關之interface。
Adaptee
需要被轉換的既有interface。
Adapter
將Adaptee轉換成ITarget interface。
Collaborations
ClIEnt呼叫Adapter的method,Adapter再去呼叫Adaptee的method完成任務[1]。