溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C#如何解析適配器設(shè)計模式

發(fā)布時間:2021-10-29 16:50:07 來源:億速云 閱讀:124 作者:柒染 欄目:編程語言

這篇文章將為大家詳細講解有關(guān)C#如何解析適配器設(shè)計模式,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

今天看到一個園子里的朋友寫了一篇ASP.NET的適配器設(shè)計模式的文章。其中提到了把輸入的電壓轉(zhuǎn)換成燈泡適合的電壓,這樣才能使燈泡正常工作。正巧,我也在學習設(shè)計模式,其中翻看了一下秦小波寫的《設(shè)計模式與禪》這本書,其中提到了設(shè)計模式的定義為:

將一個類的接口變成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠一起工作。

適配器模式又叫變壓器模式,也叫包裝模式。

我們知道,中國的電壓是220V,而日本的電壓為110V,我們中國生產(chǎn)的電燈泡一般額定電壓為220V,如果想要這個燈泡在日本能夠正常工作就必須使用一個適配器,把110V電壓轉(zhuǎn)換成220V電壓。這里作者舉得例子并沒有實現(xiàn)把一個接口或類轉(zhuǎn)換到另外一個可以使用的類,僅僅是把輸入?yún)?shù)做了判斷,這是不是適配器模式我不予置評,下面貼出我實現(xiàn)的適配器模式。

定義接口代碼如下:

using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;   namespace HelloWorld  {      /// <summary>      /// 中國電接口      /// </summary>      public interface IChinaElectricity      {          /// <summary>          /// 電壓          /// </summary>          /// <returns></returns>          int Voltage();      }      /// <summary>      /// 日本電接口      /// </summary>      public interface IJapanElectricity      {          /// <summary>          /// 電壓          /// </summary>          /// <returns></returns>          int Voltage();      }      /// <summary>      /// 燈接口      /// </summary>      public interface IChinaLight      {          /// <summary>          /// 發(fā)光          /// </summary>          /// <returns></returns>          string Light(int voltage);      }  }

定義的類如下:

using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;   namespace HelloWorld  {      public class ChinaElectricity : IChinaElectricity      {          public int Voltage()          {              return 220;          }      }       public class JapanElectricity : IJapanElectricity      {          public int Voltage()          {              return 110;          }      }       public class ChinaLight : IChinaLight      {          /// <summary>          /// 發(fā)光          /// </summary>          /// <returns></returns>          public string Light(int voltage)          {              if (voltage == 220)              {                  return "我發(fā)光啦....";              }              else             {                  return ("電壓不正確,無法正常工作...");              }          }      }      /// <summary>      /// 定義一個電壓適配器      /// </summary>      public class ElectricityAdapter : IChinaElectricity      {          private int voltage = 0;          private IJapanElectricity iJElectricity = null;                    public ElectricityAdapter(IJapanElectricity _baseElectricity)          {              iJElectricity = _baseElectricity;              voltage = this.iJElectricity.Voltage();          }          public int Voltage()          {              return voltage + 110;          }      }  }

這里面我們定義了一個適配器的類,把日本電壓適配成中國電壓,這樣才能夠使燈泡正常工作。代碼如下:

static void Main(string[] args)          {               //初始化一個中國電燈              IChinaLight iCLight = new ChinaLight();              //初始化中國的電              IChinaElectricity iCElectricity = new ChinaElectricity();              //初始化日本電              IJapanElectricity iJElectricity =new JapanElectricity();               //使用適配器              IChinaElectricity iCAElectricity = new ElectricityAdapter(iJElectricity);               //電壓正確電燈發(fā)光              Console.WriteLine(iCLight.Light(iCElectricity.Voltage()));               //使用電壓適配器進行適配              Console.WriteLine(iCLight.Light(iCAElectricity.Voltage()));               //電壓不正確,電燈產(chǎn)生異常              Console.WriteLine(iCLight.Light(iJElectricity.Voltage()));                        }

通過適配器模式的定義可以知道,其實適配器模式無非是把一種已經(jīng)無法修改,或是修改成本較高的源角色通過適配角色轉(zhuǎn)換成目標角色,這樣整個業(yè)務(wù)體系才能夠在代價最小的情況下進行正常運行。

適配器模式的優(yōu)點:

適配器模式可以讓兩個沒有任何關(guān)系的類在一起運行,只要適配器這個角色能夠搞定他們就行。

  • 增加了類的透明性。

  • 提高了類的復(fù)用度。

  • 靈活性非常好。

適配器模式的使用場景:

適配器應(yīng)用場景只要記住一點就足夠了:你有動機修改一個已經(jīng)投產(chǎn)中的接口時,適配器模式可能是最適合你的模式。比如系統(tǒng)擴展了,只需要一個已有或新建立的類,但這個類又不符合系統(tǒng)的接口,這個時候使用適配器模式比修改已存在的類代價要小的多。

關(guān)于C#如何解析適配器設(shè)計模式就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI