介面卡模式將某個類的介面轉換成客戶端期望的另乙個介面表示,目的是消除由於介面不匹配所造成的類的相容性問題。主要分為三類:類的介面卡模式、物件的介面卡模式、介面的介面卡模式。首先,我們來看看類的介面卡模式,先看類圖:
核心思想就是:有乙個source類,擁有乙個方法,待適配,目標介面是targetable,通過adapter類,將source的功能擴充套件到targetable裡,看**:
public
class source
}
public
inte***ce targetable
public
class
adapter
extends
source
implements
targetable
}
adapter類繼承source類,實現targetable介面,下面是測試類:
public
class adaptertest
}
輸出:this is original method!
this is the targetable method!
這樣targetable介面的實現類就具有了source類的功能。
基本思路和類的介面卡模式相同,只是將adapter類作修改,這次不繼承source類,而是持有source類的例項,以達到解決相容性的問題。看圖:
只需要修改adapter類的原始碼即可:
public
class
implements
targetable
@override
public
void
method2()
@override
public
void
method1()
}
測試類:
public
class adaptertest
}
輸出與第一種一樣,只是適配的方法不同而已。
第三種介面卡模式是介面的介面卡模式,介面的介面卡是這樣的:有時我們寫的乙個介面中有多個抽象方法,當我們寫該介面的實現類時,必須實現該介面的所有方法,這明顯有時比較浪費,因為並不是所有的方法都是我們需要的,有時只需要某一些,此處為了解決這個問題,我們引入了介面的介面卡模式,借助於乙個抽象類,該抽象類實現了該介面,實現了所有的方法,而我們不和原始的介面打交道,只和該抽象類取得聯絡,所以我們寫乙個類,繼承該抽象類,重寫我們需要的方法就行。看一下類圖:
這個很好理解,在實際開發中,我們也常會遇到這種介面中定義了太多的方法,以致於有時我們在一些實現類中並不是都需要。看**:
public
inte***ce sourceable
public
abstract
class
implements
sourceable
public
void
method2(){}
}
public
class
sourcesub1
extends
public
void
method1()
}
public
class
sourcesub2
extends
public
void
method2()
}
public
public
static
void
main(string args)
}
測試輸出:the sourceable inte***ce』s first sub1!
the sourceable inte***ce』s second sub2!
達到了我們的效果!
講了這麼多,總結一下三種介面卡模式的應用場景:
類的介面卡模式:當希望將乙個類轉換成滿足另乙個新介面的類時,可以使用類的介面卡模式,建立乙個新類,繼承原有的類,實現新的介面即可。
介面卡模式Adapt
例子 牆上的插座為三孔介面,但是很多家電都是雙孔標準,這個時候就需要乙個介面卡,讓雙孔的家電通過介面卡後也可以接入三孔介面的插座 兩種介面卡 物件介面卡 三孔插座 雙孔插座 使用雙孔插座的電視 物件介面卡 author wjm date 2020 6 16 17 10 public class tv...
介面卡模式(Adapt) 設計模式(六)
作用 將乙個類的介面轉換成客戶希望的另外乙個介面。adapt 模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。解析 adapt 模式其實就是把完成同樣的乙個功能但是介面不能相容的類橋接在一起使之可以在一起工作,這個模式使得復用舊的介面成為可能.實現 adapt 模式有兩種實現辦法,一種...
設計模式之介面卡模式(類介面卡模式)
介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...