將一個類的接口轉換成客戶希望的另一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
這么聽來是不是感覺特別的神奇,其實適配器在生活中隨處可見,就比如我們現在所使用的筆記本來舉例子,大家都知道一般家用的插座的電壓是220v,那么對于筆記本基本能夠接受的電壓是19V,如何能夠讓筆記本通電就需要用到一個適配器來使用一個輸入為220V的電壓轉換成一個輸出19V的電壓到筆記本端。適配器就是將原本不適合的東西轉換成我們想要的最終結果。
在開發中我們能夠要與外部的廠家進行交互,有的時候我們已經開發完成的一整套系統,可會因為很多的原因致使廠家的更換 ,那么如何不改變原有的系統代碼的情況下使用這個新的廠家的接口呢,那么我們就需要一個適配器要將進行類的包裝。

首先我們看一來系統的類圖,通過下圖可以發現我們原有的系統獲取的是一個文本類型的數據,而新的接口里面獲取的是一個整型,如何不改變原有的接口的情況下使用新的接口,我們在需要添加一個適配器。


上圖就是我們所添加的一個適配器,我們這個Adapter繼續的是IInhere類,我們集成的這個類之后我們添加一個NewClass的對象,然后我們在調用IInhere的時候使用的其實是newClass這個類中的方法。
原有廠家接口:
public interface IInhere { string text { get; set; } string getText(); void setText(string text); } class InhereClass:IInhere { public string text { get; set; } public string getText() { return text; } public void setText(string text) { this.text = text; } }新的廠家接口:
interface INew { int number { get; set; } int getNumber(); void setNumber(int number); } class NewClass:INew { public int number { get; set; } public int getNumber() { return this.number; } public void setNumber(int number) { this.number = number; } }適配器代碼:
class Adapter:IInhere { PRivate NewClass newClass=new NewClass(); public string text { get; set; } public string getText() { return newClass.getNumber().ToString(); } public void setText(string text) { try { newClass.setNumber(Convert.ToInt32(text)); } catch (ArgumentException ex) { throw new ArgumentException("傳入錯誤,請傳入一個有效的數字的字符形式"); } } }測試代碼:
static void Main(string[] args) { InhereClass _inhereClass=new InhereClass(); _inhereClass.setText("10"); Console.WriteLine(_inhereClass.getText()); NewClass _iNew = new NewClass(); _iNew.setNumber(100); Console.WriteLine(_iNew.getNumber()); IInhere adapter=new Adapter(); adapter.setText("1000"); Console.WriteLine(adapter.getText()); }結果:

我們發現原有的廠家接口用的是String類型,但是新的廠家接口用的卻是Int類型,我們在其中添加一個Adapter類來進行數據的包裝和處理,這樣我們的系統根據不用關心新的廠家是什么類型,因為最終都會通過Adapter轉換成我們想要的類型來進行相應的處理。
新聞熱點
疑難解答