定義:Adapter:將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
角色設(shè)定:
Helen,初次接觸設(shè)計(jì)模式的美女程序員(沒有BF)。
AndyTao,高手,戰(zhàn)斗力達(dá)到N級,對設(shè)計(jì)模式有相當(dāng)程度的了解。
問題的提出:
Helen埋首在公司自己的小空間里寫著代碼,(旁白:她雖然是個(gè)美女,但是寫代碼的水平還是不錯的。)有點(diǎn)問題正在埋頭苦想,這時(shí),AndyTao從旁邊冒出來,“嗨,美女,到點(diǎn)了,一起吃飯吧?”“不行,我正煩著呢!”Helen皺著眉頭說?!巴郏l,誰欺負(fù)咱們Helen???”“切,誰敢欺負(fù)我啊?!薄澳窃趺戳??”AndyTao一副義憤填膺的樣子(這小子,司馬昭之心)。
“沒有啦,我這里程序不好處理?!薄班?,我看看!”AndyTao不知什么時(shí)候已經(jīng)在Helen的身后了。
屏幕上一段代碼:
public class DrawCircle {
public void DrawCircle() {
……
}
public void insert(String msg){
System.out.println("DrawCircle insert():"+msg);
}
……
}
public class DrawAngle {
public void DrawAngle() {
……
}
public void insert(String msg){
System.out.println("DrawAngle insert():"+msg);
}
……
}
“我現(xiàn)在要在DrawCircle中調(diào)用DrawAngle的方法,可是類的已經(jīng)分發(fā)出去了,不能修改,我該怎么辦?”
看著美女皺眉頭的樣子,AndyTao一陣心痛,“這樣啊,我給你提示,再寫個(gè)Adapter類吧。”“什么是Adapter?”
“呵呵,在實(shí)際編碼過程中,由于某種需要,我們經(jīng)常要將兩個(gè)毫無關(guān)系的類交互。于是我們需要進(jìn)行某種修正,修改各個(gè)類的接口,這通常不符合編碼要求,而且,如果沒有源代碼,我們又該怎么辦?于是,我們就要用到Adapter了,也就是適配器的意思。象你上面的程序,我們不能修改類接口,于是,我們再寫一個(gè)Adapter類?!?BR> public class DrawAdapter extends DrawCircle {
private DrawAngle drawangle;
public DrawAdapter(DrawAngle angle) {
this.drawangle=angle;
}
public void insert(String msg) {
drawangle.insert(str);
}
……
}
“在上面代碼中,DrawAngle屬于Adaptee,是被適配者。DrawAdapter是Adapter,將Adaptee(被適配者DrawAngle)和Target(目標(biāo)DrawCircle)進(jìn)行適配。實(shí)際上這是將組合方法(composition)和繼承(inheritance)方法綜合運(yùn)用的一個(gè)例子。這樣,你就無需對原來的類修改,甚至無需要知道其內(nèi)部結(jié)構(gòu)和源代碼?!?BR>
角色設(shè)定:
Helen,初次接觸設(shè)計(jì)模式的美女程序員(沒有BF)。
AndyTao,高手,戰(zhàn)斗力達(dá)到N級,對設(shè)計(jì)模式有相當(dāng)程度的了解。
問題的提出:
Helen埋首在公司自己的小空間里寫著代碼,(旁白:她雖然是個(gè)美女,但是寫代碼的水平還是不錯的。)有點(diǎn)問題正在埋頭苦想,這時(shí),AndyTao從旁邊冒出來,“嗨,美女,到點(diǎn)了,一起吃飯吧?”“不行,我正煩著呢!”Helen皺著眉頭說?!巴郏l,誰欺負(fù)咱們Helen???”“切,誰敢欺負(fù)我啊?!薄澳窃趺戳??”AndyTao一副義憤填膺的樣子(這小子,司馬昭之心)。
“沒有啦,我這里程序不好處理?!薄班?,我看看!”AndyTao不知什么時(shí)候已經(jīng)在Helen的身后了。
屏幕上一段代碼:
public class DrawCircle {
public void DrawCircle() {
……
}
public void insert(String msg){
System.out.println("DrawCircle insert():"+msg);
}
……
}
public class DrawAngle {
public void DrawAngle() {
……
}
public void insert(String msg){
System.out.println("DrawAngle insert():"+msg);
}
……
}
“我現(xiàn)在要在DrawCircle中調(diào)用DrawAngle的方法,可是類的已經(jīng)分發(fā)出去了,不能修改,我該怎么辦?”
看著美女皺眉頭的樣子,AndyTao一陣心痛,“這樣啊,我給你提示,再寫個(gè)Adapter類吧。”“什么是Adapter?”
“呵呵,在實(shí)際編碼過程中,由于某種需要,我們經(jīng)常要將兩個(gè)毫無關(guān)系的類交互。于是我們需要進(jìn)行某種修正,修改各個(gè)類的接口,這通常不符合編碼要求,而且,如果沒有源代碼,我們又該怎么辦?于是,我們就要用到Adapter了,也就是適配器的意思。象你上面的程序,我們不能修改類接口,于是,我們再寫一個(gè)Adapter類?!?BR> public class DrawAdapter extends DrawCircle {
private DrawAngle drawangle;
public DrawAdapter(DrawAngle angle) {
this.drawangle=angle;
}
public void insert(String msg) {
drawangle.insert(str);
}
……
}
“在上面代碼中,DrawAngle屬于Adaptee,是被適配者。DrawAdapter是Adapter,將Adaptee(被適配者DrawAngle)和Target(目標(biāo)DrawCircle)進(jìn)行適配。實(shí)際上這是將組合方法(composition)和繼承(inheritance)方法綜合運(yùn)用的一個(gè)例子。這樣,你就無需對原來的類修改,甚至無需要知道其內(nèi)部結(jié)構(gòu)和源代碼?!?BR>