1 引子
當專案中現有的類不太符合要求時,或許會修改類及方法;但是當專案緊急,等著上線就沒有那麼多時間讓我們review了,這個時候該怎麼辦呢?
別著急,或許介面卡模式可以幫我們解決這個問題。介面卡模式的原型**為:
現有的類adaptee:
public
class
adaptee
}
adaptee類代表現有的類或者別人寫的類,方法不滿足新的需求;
目標類target:
public
class
target
}
target類代表新的需求;
適配類adapter:
public
class
adapter
extends
target
}
adapter類繼承target類,並聚合adaptee類的物件;
是的,很簡單的原型**,通過adapter類呼叫adaptee類的方法。這類結構的**是介面卡模式。
2 介面卡模式原理
《大話設計模式》中這樣定義介面卡模式:將乙個類的介面轉換成客戶希望的另外乙個介面。adapter模式使得原本由於介面不相容而不能一起功能的那些類可以一起工作。
介面卡模式的原型**非常簡單, adapter類把兩個不相關的類通過繼承目標類,聚合需要適配的類,來達到適配的目的。這裡的適配是指呼叫目標類的method()方法,實則呼叫需適配類的specialmethod()方法。
uml類圖:
target:目標介面類,用於代表客戶希望擁有的目標方法的抽象原型;
onetarget:目標實體類,表示客戶需要的具體方法;
adaptee:現有的方法,表示需要適配的方法;
adapter:介面卡類,通過介面卡類連線目標類和需適配的類;
client:呼叫測試類。
3 介面卡模式特點
介面卡模式說實話,個人感覺不太實用,真要碰到方法不太實用的情況都會直接修改方法,除非方法封裝在介面中無法修改或者時間非常緊急沒法修改等。
或許你的意識中感覺介面卡模式和中介模式有點相似,都是通過另外乙個把兩個類連線起來;其實他們有本質區別的,區別在於:
中介模式是行為模式,是把現有的類的行為抽取出來。具體可以看這篇中介模式文章,原本xiaoli和xiaoming中彼此有聯絡,行為互相耦合,通過中介模式把耦合的行為抽取出來達到解耦的目的;
介面卡模式是結構模式,是把不相關的類聯絡起來。target類和adaptee類通過adapter類聚合在一起。
所以介面卡模式和中介者模式兩者的目的不相同。
4 介面卡模式使用場景
少見。5 參考資料
《大話設計模式》
6 原始碼
設計模式之介面卡模式(類介面卡模式)
介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...
設計模式之 介面卡模式
1,介面卡模式把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法一起工作的兩個類能夠在一起工作 2,介面卡模式有兩種 1 類的介面卡模式 介面卡類繼承源類 這樣介面卡類就繼承了源類有的方法 並實現目標介面,實現在源類中沒有而在介面中有的方法,從而實現介面卡類有目標介面的所有方...
設計模式之介面卡模式
介面卡模式定義 將乙個類的介面,轉換成客戶期望的另乙個介面。介面卡讓原本介面不相容的類可以合作無間。簡單定義 封裝物件,並提供不同的介面。簡單例子 鴨子介面 package headfirst.adapter.ducks public inte ce duck 具體鴨子 package headfi...