將一個接口轉換成客戶但願的另外一個接口,使接口不兼容的那些類能夠一塊兒工做,其別名爲包裝器(Wrapper)。 java
通常的通俗例子是:咱們生活用電是220V,給手機充電通常是5V,直接用220V充電是不行的,因此須要一個變壓器(適配器),把220V變成5V。編程
用程序設計來解釋,項目初始階段的需求是:app
程序上線後一段時間,需求有變動,須要讓這個方法也接收老虎對象,打印老虎的特徵,在不改變程序的前提下改如何作?測試
答案就是使用適配器模式來解決這個問題。this
我的理解是,適配器模式的最大使用場景有兩個:spa
用一個實際的項目場景來舉例:設計
程序上線後,通過一段時間,有新的需求須要實現:code
這種狀況下就可使用適配器模式了,下面是類圖和代碼:server
實現代碼:對象
// TBox的協議接口。 public interface TBoxProtocol { // 點火 void engineOn(); // 熄火 void engineOff(); // 遠程控制 void control(); } // TBox對象,實現了TBox協議 public class TBox implements TBoxProtocol { // 點火 public void engineOn() { System.out.println("TBox協議:點火"); } // 熄火 public void engineOff() { System.out.println("TBox協議:熄火"); } // 遠程控制 public void control() { System.out.println("TBox協議:遠程控制"); } } // 模擬一個服務端,接收TBox協議作某些業務 public class Server { // 先點火、在進行遠程控制、在熄火 public void handler(TBoxProtocol tBoxProtocol) { tBoxProtocol.engineOn(); tBoxProtocol.control(); tBoxProtocol.engineOff(); } }
// OBD協議 public interface OBDProtocol { // 點火 void engineOn(); // 熄火 void engineOff(); } // OBD對象,實現了OBD協議 public class OBD implements OBDProtocol { // 點火 public void engineOn() { System.out.println("OBD協議:點火"); } // 熄火 public void engineOff() { System.out.println("OBD協議:熄火"); } }
// TBox適配器,將OBD適配成TBox public class TBoxAdapter implements TBoxProtocol { // 注入一個OBD協議 private OBDProtocol obdProtocol; public TBoxAdapter(OBDProtocol obdProtocol) { this.obdProtocol = obdProtocol; } // 在點火,熄火,遠程控制時,調用OBD協議在這幾個場景下的業務方法 public void engineOn() { obdProtocol.engineOn(); } public void engineOff() { obdProtocol.engineOff(); } public void control() { // 若是OBD不支持某方法,能夠作其餘處理 System.out.println("OBD不支持遠程控制。"); } }
public class Client { public static void main(String[] args) { // 建立一個服務端 Server server = new Server(); // 建立一個TBox協議,而後發送給服務端 TBoxProtocol tBoxProtocol = new TBox(); server.handler(tBoxProtocol); System.out.println(); // TBox TBoxAdapter tBoxAdapter = new TBoxAdapter(new OBD()); server.handler(tBoxAdapter); } } // 輸入 TBox協議:點火 TBox協議:遠程控制 TBox協議:熄火 OBD協議:點火 OBD不支持遠程控制。 OBD協議:熄火
適配器的好處以下:
過多的使用適配器,會讓系統的總體設計變得零亂。
因此,須要養成良好的設計習慣,對文檔和圖例及時進行更新,編寫的簡單易懂,要與現有代碼一致。
適配器模式的作法,從程序的角度去理解的話,能夠按照以下步驟:
從業務角度的話,和在第二小節描述使用場景時同樣:
以上就是我對適配器模式的一些理解,有不足之處請你們指出,謝謝。