[C# 设计模式] Adapter - 适配器模式(两种)
Adapter - 適配器模式
序
現(xiàn)實(shí)生活中,我們常用到適配器。
你當(dāng)前打開(kāi)我這篇文章的筆記本電腦,電源的另一邊不正連著一塊適配器嗎?
你平時(shí)想將三口插座插進(jìn)二口插座里面,不也需要一個(gè)適配器嗎?
整天插在插座上的手機(jī)充電頭,不也是一個(gè)適配器嗎?
?
目錄
- 第一種:類(lèi)適配器(使用繼承)
- 第二種:對(duì)象適配器(使用委托)
- 抽象的 UML 類(lèi)圖
?
第一種:類(lèi)適配器(使用繼承)
這里,我假設(shè)家用功率為 220v,經(jīng)過(guò)適配器,輸出為 18v,可供我的筆記本進(jìn)行使用。
類(lèi)圖
?
Portal(入口) 類(lèi):只有一個(gè)方法 Input(),來(lái)表示輸入的電流功率。
IOutput(輸出)接口:只有一個(gè)方法 Output(),來(lái)表示經(jīng)過(guò)轉(zhuǎn)換后輸出的電流功率。
Adapter(適配器)類(lèi):實(shí)現(xiàn)了 IOutput 接口。
?
Portal.cs 類(lèi)
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 類(lèi)
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 類(lèi)
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 }?
客戶(hù)端在使用的過(guò)程中,我們只知道輸出的結(jié)果即可,內(nèi)部實(shí)現(xiàn)不需要理會(huì)。
?
第二種:對(duì)象適配器(使用委托)
委托:自己不想做的事,交給第三方去做。
類(lèi)圖
?
Portal.cs 類(lèi)
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 類(lèi)
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 類(lèi)
1 /// <summary> 2 /// 出口 3 /// </summary> 4 abstract class Export 5 { 6 public abstract void Output(); 7 }?
抽象的 UML 類(lèi)圖
4 種角色:Adaptee(被適配),Adapter(適配者),Client(使用場(chǎng)景),Target(目標(biāo)對(duì)象)。
Adaptee(被適配):不是 -er 結(jié)尾的哦,之前的 Portal(入口)類(lèi)作為被適配者。
Adapter(適配者):作為 Adaptee 和 Target 的媒介,進(jìn)行調(diào)節(jié)。
Client(使用場(chǎng)景):一個(gè)調(diào)用的入口,以 Main() 作為入口函數(shù)。
Target(目標(biāo)對(duì)象):調(diào)節(jié)(適配)后的輸出,之前的 IOutput 接口和 Export 類(lèi)都是作為 Target 對(duì)象。
?
圖:類(lèi)適配器(使用繼承)
圖:對(duì)象適配器(使用委托)
?
?
?C# 設(shè)計(jì)模式系列
《Iterator - 迭代器模式:我與一份奧利奧早餐的故事》
?
?
【博主】反骨仔
【原文】http://www.cnblogs.com/liqingwen/p/6560899.html?
?
轉(zhuǎn)載于:https://www.cnblogs.com/liqingwen/p/6560899.html
總結(jié)
以上是生活随笔為你收集整理的[C# 设计模式] Adapter - 适配器模式(两种)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 201312-2ISBN编码
- 下一篇: C# System.Reflection