模式定義
將一個類的接口轉換成客戶希望的另外一個接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
模式結構
比如:一個電腦需要兩項插座,220V的電源,現(xiàn)在有三項插座和110V電源,如何讓其工作呢,現(xiàn)在就需要插座適配器和電源適配器

類適配器:實現(xiàn)目標接口+繼承以前的類

對象的適配器:實現(xiàn)目標接口+成員變量(以前的類)
代碼實現(xiàn)
public class GBTwoPlug {
public void powerWithTwo(){
System.out.println("使用二相電源");
}
}
/**
* 三項插座接口
*/
public interface ThreePlugIf {
//使用三項電流供電
public void powerWithThree();
}
/**
* 二相轉三相的插座適配器(采用組合方式)
*/
public class TwoPlugAdapter implements ThreePlugIf {
private GBTwoPlug plug;
public TwoPlugAdapter(GBTwoPlug plug) {
this.plug = plug;
}
public void powerWithThree() {
System.out.println("通過轉換");
//對適配器原有接口方法的調(diào)用被委托給新接口的實例的特定方法
plug.powerWithTwo();
}
}
/**
* 采用繼承的方式
*/
public class TwoPlugAdapterExtends extends GBTwoPlug implements ThreePlugIf {
public void powerWithThree() {
System.out.println("借助繼承適配器");
this.powerWithTwo();
}
}
public class NoteBook {
private ThreePlugIf plug;
public NoteBook(ThreePlugIf plug) {
this.plug = plug;
}
//使用插座充電
public void charge(){
plug.powerWithThree();
}
public static void main(String[] args) {
GBTwoPlug two = new GBTwoPlug();
ThreePlugIf three = new TwoPlugAdapter(two);
NoteBook nb = new NoteBook(three);
nb.charge();
three = new TwoPlugAdapterExtends();
nb = new NoteBook(three);
nb.charge();
}
}
模式的優(yōu)缺點
優(yōu)點
更好的復用性
如果功能已經(jīng)有了,只是接口不兼容,那么通過適配器模式就可以讓這些功能得到更好的復用。更好的擴展性
在實現(xiàn)適配器功能的時候,可以調(diào)用自己開發(fā)的功能,從而自然地擴展系統(tǒng)的功能。
缺點
- 過多的使用適配器,會讓系統(tǒng)非常凌亂,不容易整體進行把握。
思考
模式本質:轉換匹配,復用功能。
開發(fā)中的應用場景
- 日志框架