適配器模式
一、適配器模式
1、定義2、理解3、適配器模式分為二、類的適配器模式
實例:使用銀行卡支付的時候, 客戶可以選擇工商銀行卡支付或者建設銀行卡支付, 但兩個銀行提供不同的支付介面。
1、 類的適配器模式UML類圖
![](/images/lazyload.gif)
2、 類的適配器模式代碼實例
① 支付類代碼
//工商支付類 public class ICBC { public void icbcPay { Console.WriteLine("工商銀行付款介面~~~~"); } } //建設支付類 public class CCB { public void ccbPay { Console.WriteLine("建設銀行付款介面~~~~"); } }② 轉換代碼(插銷轉換器)
//適配器 插銷轉換代碼 public interface Ipay { void Pay; }③ 對應各種情況的轉換代碼
//工商銀行的插銷轉換 public class ICBCApter : ICBC, Ipay { public void Pay { base.icbcPay; } } //建設銀行的插銷轉換 public class CCBApter : CCB, Ipay { public void Pay { base.ccbPay; } }④ 用戶端引用介面代碼
namespace 適配器模式One { class Program { static void Main(string[] args) { Ipay ipay = new ICBCApter;//Adapter適配器 ipay.Pay;//輸出工商銀行 Console.WriteLine("----------------------------"); Ipay cpay = new CCBApter; cpay.Pay;//輸出建設銀行 Console.Read; } } }3、實例UML類圖(此類圖由VS2012自動生成)
![](/images/lazyload.gif)
三、物件的適配器模式
1、 物件的適配器模式代碼實例
① 支付類代碼
//工商支付類 public class ICBC { public void icbcPay { Console.WriteLine("工商銀行介面付款~~~~"); } } //建設支付類 public class CCB { public void ccbPay { Console.WriteLine("建設銀行介面付款~~~~"); } }② 適配器代碼
//適配器 插銷轉換代碼 public interface Ipay { void Pay; }③ 對應各種情況, 通過適配器使用的代碼
//工商銀行的插銷轉換 //適配器類, 這裡適配器類沒有ICBC類, //而是引用了ICBC物件, 所以是物件的適配器模式的實現 public class ICBCApter : Ipay { ICBC icbc = new ICBC; public void Pay { icbc.icbcPay; } } //建設銀行的插銷轉換 public class CCBApter : CCB, Ipay { CCB ccb = new CCB; public void Pay { ccb.ccbPay; } }④ 用戶端代碼
namespace 適配器模式_物件的適配器模式 { class Program { static void Main(string[] args) { Ipay pay = new ICBCApter; pay.Pay; Console.WriteLine("-------------------------"); Ipay payT = new CCBApter; payT.Pay; Console.Read; } } }2、 實例UML類圖(此類圖由VS2012自動生成)
![](/images/lazyload.gif)
四、優缺點
1、 類的適配器模式
優點:
① 在不修改原代碼的基礎上複用現有類
缺點:
① 採用了“多繼承”, 使得耦合度較高
2、 物件的適配器模式
優點:
① 採用“物件組合”方式, 降低了耦合度
② 在不修改原代碼的基礎上複用現有類
缺點:(暫不清楚)
五、使用場景
1、 系統需要複用現有類
2、 想要建立一個可重複使用的類