1、概述設計模式
將一個類的接口轉換爲客戶但願的另一個接口。Adapter模式使得本來因爲接口不兼容而不能一塊兒工做的那些類能夠一塊兒工做;ide
2、模式中的角色spa
Target:定義客戶端使用的與特定領域相關的接口;設計
Clinet:與符合Target接口的對象協同;code
Adpatee:定義一個已經存在的接口,這個接口須要適配;對象
Adpater:對Adpatee的接口與Target接口進行匹配;blog
3、UML類圖接口
4、代碼實現ci
/// <summary> /// 客戶端期待的類 /// </summary> public class Target { /// <summary> /// 使用virtual修飾以便子類能夠重寫 /// </summary> public virtual void Request() { Console.WriteLine("這是Target中的Request的方法!"); } } /// <summary> /// 定義須要適配的類 /// </summary> public class Adaptee { public void SpecificRequest() { Console.WriteLine("這是Adaptee中的SpecificRequest方法!"); } } /// <summary> /// 定義適配器類 /// </summary> public class Adapter : Target { Adaptee adaptee = new Adaptee(); /// <summary> /// 經過重寫,表面上調用Request()方法,變成了實際調用SpecificRequest() /// </summary> public override void Request() { adaptee.SpecificRequest(); } } /// <summary> /// 客服端代碼 /// </summary> /// <param name="args"></param> static void Main(string[] args) { #region 對象適配器 Target target = new Adapter(); target.Request(); #endregion }
獲得的結果:get
5、應用場景
5.1 你想使用一個已經存在的類,而它的接口不符合你的需求;
5.2 你想建立一個能夠複用的類,該類能夠與其餘不相關的類或不可預見的類(即那些接口可能不必定兼容的類)協同工做;
5.3 你想使用一些已經存在的子類,可是不可能對每個都進行子類化以匹配它們的接口。對象適配器能夠適配它的父類接口;
6、應用舉例
ADO.NET中的DataAdapter
參考書籍《設計模式-可複用面向對象軟件的基礎》