一、適配器模式的結構
適配器模式(Adapter Pattern)把一個類的介面變換成用戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。適配器模式有類的適配器模式和對象的適配器模式兩種形式。
類的適配器模式如所示:
對象的適配器模式結構如下:
適配器模式的用意是將介面不同而功能相同或相近的兩個介面加以轉換,這裡麵包括適配器角色補充了一個源角色沒有的方法。讀者不要誤以為適配器模式就是為了補充源角色沒有的方法而準備的。
二、適配器的適用情境
1、系統需要使用現有的類,而此類的介面不符合系統的需要。
2、想要建立一個可以重複使用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。這些源類不一定有複雜的介面。
3、對對象的適配器模式而言,在設計裡,需要改變多個已有的子類介面,如果使用類的適配器模式,就要針對每一個子類做一個適配器類,而這不太實際。
三、適配器模式在java中的應用
JDBC驅動軟體與適配器模式
預設適配模式
預設適配模式為一個介面提供預設實現,這樣子類型可以從這個預設實現進行擴充,而不必從原有介面進行擴充。很多情況下,必須讓一個具體類實現某一個介面,但是這個類又用不到介面所規定的所有方法。可以用一個抽象類別給出所有方法的平庸的具體實現,這樣從這個抽象類別再繼承下去的子類就不必實現所有的方法了,而這就是預設適配模式。
其結構圖如下:
其原始碼如下:
public interface AbstractServie{
void
serviceOperation1();
int
serviceOperation2();
String
serviceOperation3();
}
public class ServiceAdapter
implements
AbstractService
{
public void
serviceOperation1(){}
public int serviceOperation2(){ return 0;}
public String serviceOperation3(){return null;}
}
預設適配模式的中心是一個預設適配類。這個類應當是抽象類別,因為這個類不應當執行個體化,它的執行個體也沒有用處。但是這些方法不應是抽象的方法,因為按照模式的用意,這些方法之所以存在,就是為了提供預設實現,以便預設適配類的具體子類可以按照需要只實現需要實現的方法,忽略不需要實現的方法。
jdk中當量使用預設適配模式,在java2.0的java.awt庫中,預設適配類有WindowAdapter, ComponentAdapter, ContainerAdapter, FocusAdapter,
KeyAdapter, MouseAdapter, MouseMotionAdapter, WindowAdapter