設計模式學習筆記-適配器模式(對象適配器)
阿新 • • 發佈:2017-05-18
ring ons col class pat ima pub 不兼容 public
一、概述
將一個類的接口轉換為客戶希望的另外一個接口。Adapter模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作;
二、模式中的角色
Target:定義客戶端使用的與特定領域相關的接口;
Clinet:與符合Target接口的對象協同;
Adpatee:定義一個已經存在的接口,這個接口需要適配;
Adpater:對Adpatee的接口與Target接口進行匹配;
三、UML類圖
四、代碼實現
/// <summary> /// 客戶端期待的類 /// </summary> publicclass 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 }
得到的結果:
五、應用場景
5.1 你想使用一個已經存在的類,而它的接口不符合你的需求;
5.2 你想創建一個可以復用的類,該類可以與其他不相關的類或不可預見的類(即那些接口可能不一定兼容的類)協同工作;
5.3 你想使用一些已經存在的子類,但是不可能對每一個都進行子類化以匹配它們的接口。對象適配器可以適配它的父類接口;
六、應用舉例
ADO.NET中的DataAdapter
參考書籍《設計模式-可復用面向對象軟件的基礎》
設計模式學習筆記-適配器模式(對象適配器)