定義:Adapter:將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
角色設定:
Helen,初次接觸設計模式的美女程序員(沒有BF)。
AndyTao,高手,戰(zhàn)斗力達到N級,對設計模式有相當程度的了解。
問題的提出:
Helen埋首在公司自己的小空間里寫著代碼,(旁白:她雖然是個美女,但是寫代碼的水平還是不錯的。)有點問題正在埋頭苦想,這時,AndyTao從旁邊冒出來,“嗨,美女,到點了,一起吃飯吧?”“不行,我正煩著呢!”Helen皺著眉頭說。“哇,誰,誰欺負咱們Helen???”“切,誰敢欺負我啊?!薄澳窃趺戳耍俊盇ndyTao一副義憤填膺的樣子(這小子,司馬昭之心)。
“沒有啦,我這里程序不好處理?!薄班蓿铱纯?!”AndyTao不知什么時候已經在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中調用DrawAngle的方法,可是類的已經分發(fā)出去了,不能修改,我該怎么辦?”
看著美女皺眉頭的樣子,AndyTao一陣心痛,“這樣啊,我給你提示,再寫個Adapter類吧。”“什么是Adapter?”
“呵呵,在實際編碼過程中,由于某種需要,我們經常要將兩個毫無關系的類交互。于是我們需要進行某種修正,修改各個類的接口,這通常不符合編碼要求,而且,如果沒有源代碼,我們又該怎么辦?于是,我們就要用到Adapter了,也就是適配器的意思。象你上面的程序,我們不能修改類接口,于是,我們再寫一個Adapter類。”
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(目標DrawCircle)進行適配。實際上這是將組合方法(composition)和繼承(inheritance)方法綜合運用的一個例子。這樣,你就無需對原來的類修改,甚至無需要知道其內部結構和源代碼?!?BR>
角色設定:
Helen,初次接觸設計模式的美女程序員(沒有BF)。
AndyTao,高手,戰(zhàn)斗力達到N級,對設計模式有相當程度的了解。
問題的提出:
Helen埋首在公司自己的小空間里寫著代碼,(旁白:她雖然是個美女,但是寫代碼的水平還是不錯的。)有點問題正在埋頭苦想,這時,AndyTao從旁邊冒出來,“嗨,美女,到點了,一起吃飯吧?”“不行,我正煩著呢!”Helen皺著眉頭說。“哇,誰,誰欺負咱們Helen???”“切,誰敢欺負我啊?!薄澳窃趺戳耍俊盇ndyTao一副義憤填膺的樣子(這小子,司馬昭之心)。
“沒有啦,我這里程序不好處理?!薄班蓿铱纯?!”AndyTao不知什么時候已經在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中調用DrawAngle的方法,可是類的已經分發(fā)出去了,不能修改,我該怎么辦?”
看著美女皺眉頭的樣子,AndyTao一陣心痛,“這樣啊,我給你提示,再寫個Adapter類吧。”“什么是Adapter?”
“呵呵,在實際編碼過程中,由于某種需要,我們經常要將兩個毫無關系的類交互。于是我們需要進行某種修正,修改各個類的接口,這通常不符合編碼要求,而且,如果沒有源代碼,我們又該怎么辦?于是,我們就要用到Adapter了,也就是適配器的意思。象你上面的程序,我們不能修改類接口,于是,我們再寫一個Adapter類。”
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(目標DrawCircle)進行適配。實際上這是將組合方法(composition)和繼承(inheritance)方法綜合運用的一個例子。這樣,你就無需對原來的類修改,甚至無需要知道其內部結構和源代碼?!?BR>