適配器Adapter
1.意圖:
????????????將一個(gè)類(lèi)的接口轉(zhuǎn)換成客戶希望的另一個(gè)接口。Adapter模式使得原來(lái)由于版本不兼容而不能在一起的夠哦那個(gè)做的那些類(lèi)可以在一起工作。有時(shí),為復(fù)用而設(shè)計(jì)的工具箱類(lèi)不能夠被復(fù)用的原因僅僅是因?yàn)樗慕涌谂c專(zhuān)業(yè)應(yīng)用領(lǐng)域所需要的接口不匹配。
2.適配器模式有類(lèi)的適配器模式和對(duì)象的適配器模式兩種不同的形式。
一、類(lèi)的適配器模式
??? 類(lèi)的適配器模式把適配的類(lèi)的API轉(zhuǎn)換成目標(biāo)類(lèi)的API。
- 目標(biāo)(Target)角色:這就是所期待得到的接口。
- 源(Adaptee)角色:現(xiàn)有需要適配的接口。
- 適配器(Adapter)角色:適配器類(lèi)是本模式的核心。適配器把源接口轉(zhuǎn)換成目標(biāo)接口。顯然這一角色不可以是接口,而必須是具體類(lèi)。
/**
?* 定義Client使用的與特定領(lǐng)域相關(guān)的接口
?*/
public interface Target {
??? void sampleOperation1();
??? void sampleOperation2();
}
/**
?* 定義一個(gè)已經(jīng)存在的接口,這個(gè)接口需要適配
?*/
public class Adaptee {
??? public void sampleOperation1() {
??? ??? // ......
??? }
}
/**
?* 對(duì)Adaptee與Target接口進(jìn)行適配
?*/
public class Adapter extends Adaptee implements Target {
??? public void sampleOperation2() {
??? ??? // ......
??? }
}
二、對(duì)象適配器
??? 與類(lèi)的適配器模式一樣,對(duì)象適配器模式把適配的類(lèi)的API轉(zhuǎn)換成為目標(biāo)類(lèi)的API,與類(lèi)的適配器模式不同的是,對(duì)象的適配器模式不是使用繼承關(guān)系連接到Adaptee類(lèi),而是使用委派關(guān)系連接到Adaptee類(lèi)。示意代碼如下:
/**
?* 定義Client使用的與特定領(lǐng)域相關(guān)的接口
?*/
public interface Target {
??? void sampleOperation1();
??? void sampleOperation2();
}
/**
?* 定義一個(gè)已經(jīng)存在的接口,這個(gè)接口需要適配
?*/
public class Adaptee {
??? public void sampleOperation1() {
??? ??? // ......
??? }
}
/**
?* 對(duì)Adaptee與Target接口進(jìn)行適配
?*/
public class Adapter implements Target {
??? private Adaptee adaptee;
??? public Adapter(Adaptee adaptee) {
??? ??? super();
??? ??? this.adaptee = adaptee;
??? }
??? public void sampleOperation1() {
??? ??? adaptee.sampleOperation1(); // 看點(diǎn)
??? }
??? public void sampleOperation2() {
??? ??? // ......
??? }
}
類(lèi)適配器模式和對(duì)象適配器模式的異同:Target接口和Adaptee類(lèi)都相同,不同的是類(lèi)適配器的Adapter繼承Adaptee實(shí)現(xiàn)Target,對(duì)象適配器的Adapter實(shí)現(xiàn)Target聚集Adaptee。
適配器模式的用意是將接口不同而功能相同或者相近的兩個(gè)接口加以轉(zhuǎn)換。
posted on 2010-01-17 17:54 飛熊 閱讀(278) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): java設(shè)計(jì)模式