?????? 通常,客戶類 通過類的接口訪問它提供的服務(wù)。有時,現(xiàn)有的類 可以提供客戶類的功能需要,但是它所提供的接口不一定是客戶類所期望的。這是由于現(xiàn)有的接口太詳細(xì)或者缺乏詳細(xì)或接口的名稱與客戶類所查找的不同等諸多不同原因?qū)е碌摹?br />?
????? 在這種情況下,現(xiàn)有的接口需要轉(zhuǎn)化為客戶類期望的接口,這樣保證了對現(xiàn)有類的重用。如果不進(jìn)行這樣的轉(zhuǎn)化,客戶類就不能利用現(xiàn)有類所提供的功能。適配器模式可以完成這樣的轉(zhuǎn)化。適配器模式建議定義一個包裝類,包裝有不兼容接口的對象。這個包裝類指的就是適配器(Adapter),它包裝的對象就是適配者(Adaptee).適配器提供客戶類需要的接口,適配器接口的實(shí)現(xiàn)是把客戶類的請求轉(zhuǎn)化為對適配者的相應(yīng)接口的調(diào)用。換句話說:當(dāng)客戶類調(diào)用適配器的方法時,在適配器類的內(nèi)部調(diào)用適配者類的方法,這個過程對客戶類是透明的,客戶類并不直接訪問適配者類。因此,適配器可以使由于借口不兼容而不能交互的類可以一起工作

適配器總體上可以分為兩類:類適配器( Class?Adapter) 和對象適配器 (Object?Adapter)

adapter.bmp

類適配器:

目標(biāo)角色:

package ?adapter;
public ?? interface ?Target {
????
// 源類中也有該方法
???? void ?sampleOperator1();
????
// 源類中無該方法
???? void ?sampleOperator2();
}

源角色:

package ?adapter;
public ? class ?Adaptee {
????
// 源類中只有方法sampleOperator1
???? public ? void ?sampleOperator1() {}
}

適配器角色:

package ?adapter;
public ? class ?Adapter? extends ?Adaptee? implements ?Target {
????
// 由于源類中沒有方法sampleOperator2
????
// 所以在配置器類中補(bǔ)上
???? public ? void ?sampleOperator2() {}
}


對象適配器:

目標(biāo)角色和源角色與類適配器一樣,適配器角色如下:

package ?adapter;
public ? class ?Adapter?? implements?Target{

????
private?Adaptee?adaptee;
????
????
public?Adapter(Adaptee?adaptee){
????????
this.adaptee=adaptee;
????}

????
????
//源類中有方法sampleOperator1
????
//在適配器中直接委派
????public?void?sampleOperator1(){
????????adaptee.sampleOperator1();
????}

????
????
//源類中沒有方法sampleOperator2
????
//在適配器類中給補(bǔ)上
????public?void?sampleOperator2(){
????????
//具體實(shí)現(xiàn)
????}

}

參考資料:http://www.javaresearch.org/article/showarticle.jsp?column=31&thread=39863
?《Java與模式》