適配器模式的核心思想:把原有的接口轉變成調用者所期望的接口,從而使不同接口的類可以一起工作。
適配器中包含如下3個角色。
●源角色Adaptee:需要適配的目標或接口。
●目標角色Target:所期望得到的接口。
●適配器角色Adapter:適配器類是本模式的核心,用來把源接口轉換成目標接口,顯然這3者角色之間的交互關係便組成了適配器模式的原型。
適配器也叫做包裝器模式(Wrapper),根據適配對象的不同,又可以將適配器模式分爲3種子類型。
●類的適配器模式:用於對類進行適配。
●對象的適配器模式:用於對對象進行包裝。
●接口的適配器模式:用於對接口抽象化。
第一種:類的適配器模式,見代碼理解
//源類Adaptee
public class Source{
public void operation1(){
System.out.println("原始類的方法");
}
}
//目標接口Target
public interface Targetable{
//與源類相同的接口函數
public void operation1();
//新的接口函數,源類中沒有
public void operation2();
}
//適配器模式,繼承源類,並實現目標接口
public class Adapter extends Source implements Targetable{
//實現目標類的新接口函數
public void operation2(){
System.out.println("適配目標類後的方法");
}
}
第二種:對象的適配器模式,見如下代碼理解
//包裝器模式
public class Wrapper implements Targetable{
//源類對象
private Source source;
//取得源類對象
public Wrapper(Source source){
super();
this.source = source;
}
//調用源類對象的方法
public void operation1(){
source.operation1();
}
//實現目標類的新接口函數
public void operation2(){
System.out.println("包裝目標類後的方法");
}
}
第三種:接口的適配器模式,見代碼理解
●Sourceable是定義了多個接口函數的接口類。
●DefaultWrapper是一個抽象類,它實現了接口Sourceable,並且爲每一個接口函數提供了默認的實現。
依據DefaultWrapper就可以編寫不同的實現,在實現中只需要重寫部分待實現的函數,而不是要重寫全部。
見如下代碼理解:
//源接口
public interface Sourceable{
public void operation1();
public void operation2();
}
//默認適配器類DefaultWrapper
public abstract class DefaultWrapper implements Sourceable{
public void operation1(){}
public void operation2(){}
}
//兩個實現類,可以選擇自己需要的實現
public class SourceSub1 extends DefaultWrapper{
public void operation1(){
System.out.println("源接口的一個實現子類Sub1");
}
}
public class SourceSub2 extends DefaultWrapper{
public void operation2(){
System.out.println("源接口的一個實現子類Sub2");
}
}
java中的應用->
→對象的適配器模式:Iterator適配器
→對象的適配器模式:Enumeration適配器
→接口的適配器模式:AWT事件適配器