適配器模式(重要):
又叫包裝器,將一個接口轉換成另一個用戶希望的接口,使得原本不兼容的兩個類可以協同工作。既可以作爲類結構型模式,又可以作爲對象結構型模式。由目標抽象類、適配器類、適配者類、客戶類組成,客戶類針對目標抽閒類編程,適配器模式更多的是強調對代碼的組織,而不是功能的實現。
類適配器模式:適配器類與適配者類是繼承關係,適配器類繼承適配者類,實現目標抽象接口
對象適配器模式:適配器類與適配者類是關聯關係,適配器類關聯適配者類,繼承目標抽象類
適配器的適用場景:
1.系統要使用現有的類,而這些類的接口不符合系統的需要
2.建立一個可重複使用的類,將這個類與那些不太兼容的類一起工作
適配器的優點:
1.將目標抽象類與適配者類解耦,使用適配器類來重用現有的適配者類,無須修改原有代碼
2.將具體的實現封裝到適配者類中,增加了類的透明性和複用性,具有良好的靈活性和可擴展性。新增適配器類不需要修改原有代碼,符合開閉原則
3.類適配器模式中,適配器類可以覆蓋適配者類的一些方法,具有很強的靈活性。對象適配器可以適配多個適配者類。
適配器的缺點:
1.類適配器模式的缺點是不能適配多個適配者類和目標類必須爲接口(因爲不支持多繼承),對象適配器模式的缺點是不能夠重寫適配者類的方法
適配器的應用:
1.JDBC驅動是介於JDBC接口和數據庫引擎接口之間的適配器軟件
2.Spring AOP中的BeforeAdvice、AfterAdvice和ThrowsAdvice三種通知類型藉助適配器模式來實現,允許用戶向框架中加入任何一種自己想要支持的通知類型。
默認適配器模式:當不需要全部實現接口中的所有方法時,可先設計一個抽象類實現該接口,併爲接口中的每個方法提供一個默認實現(空方法),這樣該抽象類的子類就可以選擇地覆蓋父類的某些方法來實現需求,適用於一個類不想使用實現的接口中所有方法的情景,也稱爲單接口適配器模式。
適配者接口:要適配的對象,是一個接口
默認適配器類:是一個實現了適配者接口的抽象類
具體業務類:是默認適配器的子類,有選擇地覆蓋默認適配器類中的方法
適配器模式的例子(類適配器):模擬數據庫引擎和JDBC接口
適配者類(數據庫引擎)
public class SqlConnection {
public void sqlStart() {
System.out.println("數據庫初始化。。。");
}
public void sqlClose() {
System.out.println("數據庫關閉。。。");
}
}
目標抽象接口(JDBC接口)
public interface ConnectDB {
public void start();
public void close();
}
適配器類(mysql JDBC驅動)
public class MysqlAdapter extends SqlConnection implements ConnectDB{
/**
* @Description: TODO
* @author doudou
* @date 2019年10月9日
* @throws
* @return
* @see structural.AdapterPattern.ConnectDB#start()
*/
@Override
public void start() {
sqlStart();
}
/**
* @Description: TODO
* @author doudou
* @date 2019年10月9日
* @throws
* @return
* @see structural.AdapterPattern.ConnectDB#close()
*/
@Override
public void close() {
sqlClose();
}
}