擴充卡模式的意圖在于,使用不同接口的類所提供的服務為用戶端提供它所期望的接口,進而能夠相容工作。
分為
- 類擴充卡模式 通過新的适配類實作用戶端期望的接口,并繼承現有的需要适配的類。
- 對象擴充卡模式 用戶端沒有暴露出期望的接口,而是類或者抽象類,此時隻能使用對象擴充卡模式,繼承用戶端期望的類,然後使用委派(組合),使新的擴充卡類擁有一個被适配類的執行個體對象。可能比類擴充卡更脆弱,因為新的擴充卡類可能無法使用一些被擴充卡類中的protected類型的方法或變量。
jdk中的擴充卡模式:
- 位元組流與字元流的轉換,通過InputStremReader類完成。InputStreamReader類(Adapter)繼承了Reader(Target),并且通過構造函數傳入一個InputSream的執行個體(Adaptee),實作了jdk面向位元組的輸入向面向字元輸入的轉換。
- 在java GUI api中,MouseAdapter抽象類将MouseListener接口中的方法全部實作為空方法,相當于一個樁(stub),當程式中某個元件需要添加一個事件處理時,可以繼承MouseAdapter。根據設計模式中的定義來說,MouseAdapter并沒有實作真正意義上的适配或轉換,Adapter的職責由它的子類完成。