如上圖所示,生活中適配器無處不在,如電源適配器,讀卡器,甚至多轉接頭讀卡器等,都是很常見的例子,它們的目的都是將本來不能一塊兒工做的部件可以在一塊兒工做。
在軟件工程領域的適配器也是一樣相似的做用。git
適配器模式是將一個類的接口轉換成客戶但願的另一個接口,即將本來因爲接口不兼容而不能一塊兒工做的那些類能夠一塊兒工做。github
這裏就以一個簡單的讀卡器的例子來加以說明。一般在咱們使用SD卡存儲文件時,會存在以下狀況:code
所以,咱們須要在中間實現一個轉換器,也就是讀卡器。具體關係圖以下:blog
不難發現,電腦(Computer
)和讀卡器(SdReader
)都實現了USB接口(IUsb
),而讀卡器又聚合了SD卡,也就是SD卡隨時能夠插到讀卡器上。具體實現代碼以下:接口
public interface IUsb { void Request(); } public class Sd { public void ReadWrite() { Console.WriteLine("存取數據"); } } public class Computer { private IUsb _usb; public void SetUsb(IUsb usb) { _usb = usb; } public void ConnectUsb() { if (_usb != null) { _usb.Request(); } } } public class SdReader : IUsb { private Sd _sd; public SdReader(Sd sd) { _sd = sd; } public void Request() { _sd.ReadWrite(); } }
其中,USB接口(IUsb
)、電腦(Computer
)還有SD卡(Sd
)都是不可變,而讀卡器(SdReader
)的目的就是爲了讓SD卡(Sd
)可以適配USB接口(IUsb
)而額外增長的部分。get
將上述類圖進行簡單的抽象就能夠獲得以下UML類圖,,這就是適配器模式:源碼
過多地使用適配器,會讓系統很是零亂,不易總體進行把握。產品
適配器模式雖然可讓任何兩個沒有關聯的類一塊兒運行,可是卻屬於補償機制,專門用來在系統後期擴展、修改時使用,屬於無可奈何的作法。所以,適配器模式也不宜過分使用,若是能夠的話,咱們應該優先經過重構解決,即讓被適配的兩個類一開始就能夠一塊兒工做或許會更好。it
源碼連接class