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