[C# 设计模式] Adapter - 适配器模式(两种)
Adapter - 適配器模式
序
現實生活中,我們常用到適配器。
你當前打開我這篇文章的筆記本電腦,電源的另一邊不正連著一塊適配器嗎?
你平時想將三口插座插進二口插座里面,不也需要一個適配器嗎?
整天插在插座上的手機充電頭,不也是一個適配器嗎?
?
目錄
- 第一種:類適配器(使用繼承)
- 第二種:對象適配器(使用委托)
- 抽象的 UML 類圖
?
第一種:類適配器(使用繼承)
這里,我假設家用功率為 220v,經過適配器,輸出為 18v,可供我的筆記本進行使用。
類圖
?
Portal(入口) 類:只有一個方法 Input(),來表示輸入的電流功率。
IOutput(輸出)接口:只有一個方法 Output(),來表示經過轉換后輸出的電流功率。
Adapter(適配器)類:實現了 IOutput 接口。
?
Portal.cs 類
1 /// <summary> 2 /// 入口 3 /// </summary> 4 class Portal 5 { 6 private readonly string _msg; 7 8 public Portal(string msg) 9 { 10 _msg = msg; 11 } 12 13 /// <summary> 14 /// 輸入(電流) 15 /// </summary> 16 public void Input() 17 { 18 Console.WriteLine(_msg + " --> 18v。"); 19 } 20 }
IOutput.cs 接口
1 interface IOutput 2 { 3 /// <summary> 4 /// 輸出(電流) 5 /// </summary> 6 void Output(); 7 }?
Adapter.cs 類
1 /// <summary> 2 /// 適配器 3 /// </summary> 4 class Adapter : Portal, IOutput 5 { 6 public Adapter(string msg) : base(msg) 7 { 8 } 9 10 public void Output() 11 { 12 Input(); 13 } 14 }?
Client.cs 類
1 class Client 2 { 3 static void Main(string[] args) 4 { 5 IOutput adapter = new Adapter("220v"); 6 adapter.Output(); 7 8 Console.Read(); 9 } 10 }?
客戶端在使用的過程中,我們只知道輸出的結果即可,內部實現不需要理會。
?
第二種:對象適配器(使用委托)
委托:自己不想做的事,交給第三方去做。
類圖
?
Portal.cs 類
1 /// <summary> 2 /// 入口 3 /// </summary> 4 class Portal 5 { 6 private readonly string _msg; 7 8 public Portal(string msg) 9 { 10 _msg = msg; 11 } 12 13 public void Input() 14 { 15 Console.WriteLine(_msg + " --> 18v"); 16 } 17 }?
Adapter.cs 類
1 class Adapter : Export 2 { 3 private readonly Portal _portal; 4 5 public Adapter(string msg) 6 { 7 _portal = new Portal(msg); 8 } 9 10 public override void Output() 11 { 12 _portal.Input(); 13 } 14 }?
Export.cs 類
1 /// <summary> 2 /// 出口 3 /// </summary> 4 abstract class Export 5 { 6 public abstract void Output(); 7 }?
抽象的 UML 類圖
4 種角色:Adaptee(被適配),Adapter(適配者),Client(使用場景),Target(目標對象)。
Adaptee(被適配):不是 -er 結尾的哦,之前的 Portal(入口)類作為被適配者。
Adapter(適配者):作為 Adaptee 和 Target 的媒介,進行調節。
Client(使用場景):一個調用的入口,以 Main() 作為入口函數。
Target(目標對象):調節(適配)后的輸出,之前的 IOutput 接口和 Export 類都是作為 Target 對象。
?
圖:類適配器(使用繼承)
圖:對象適配器(使用委托)
?
?
?C# 設計模式系列
《Iterator - 迭代器模式:我與一份奧利奧早餐的故事》
?
?
【博主】反骨仔
【原文】http://www.cnblogs.com/liqingwen/p/6560899.html?
?
轉載于:https://www.cnblogs.com/liqingwen/p/6560899.html
總結
以上是生活随笔為你收集整理的[C# 设计模式] Adapter - 适配器模式(两种)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 201312-2ISBN编码
- 下一篇: 链表是否带环、环入口、环长度、链表相交问