這篇文章將為大家詳細(xì)講解有關(guān)C#如何解析適配器設(shè)計(jì)模式,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
公司主營業(yè)務(wù):網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出未央免費(fèi)做網(wǎng)站回饋大家。
今天看到一個(gè)園子里的朋友寫了一篇ASP.NET的適配器設(shè)計(jì)模式的文章。其中提到了把輸入的電壓轉(zhuǎn)換成燈泡適合的電壓,這樣才能使燈泡正常工作。正巧,我也在學(xué)習(xí)設(shè)計(jì)模式,其中翻看了一下秦小波寫的《設(shè)計(jì)模式與禪》這本書,其中提到了設(shè)計(jì)模式的定義為:
將一個(gè)類的接口變成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個(gè)類能夠一起工作。
適配器模式又叫變壓器模式,也叫包裝模式。
我們知道,中國的電壓是220V,而日本的電壓為110V,我們中國生產(chǎn)的電燈泡一般額定電壓為220V,如果想要這個(gè)燈泡在日本能夠正常工作就必須使用一個(gè)適配器,把110V電壓轉(zhuǎn)換成220V電壓。這里作者舉得例子并沒有實(shí)現(xiàn)把一個(gè)接口或類轉(zhuǎn)換到另外一個(gè)可以使用的類,僅僅是把輸入?yún)?shù)做了判斷,這是不是適配器模式我不予置評,下面貼出我實(shí)現(xiàn)的適配器模式。
定義接口代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace HelloWorld { ////// 中國電接口 /// public interface IChinaElectricity { ////// 電壓 /// ///int Voltage(); } /// /// 日本電接口 /// public interface IJapanElectricity { ////// 電壓 /// ///int Voltage(); } /// /// 燈接口 /// public interface IChinaLight { ////// 發(fā)光 /// ///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 { ////// 發(fā)光 /// ///public string Light(int voltage) { if (voltage == 220) { return "我發(fā)光啦...."; } else { return ("電壓不正確,無法正常工作..."); } } } /// /// 定義一個(gè)電壓適配器 /// 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; } } }
這里面我們定義了一個(gè)適配器的類,把日本電壓適配成中國電壓,這樣才能夠使燈泡正常工作。代碼如下:
static void Main(string[] args) { //初始化一個(gè)中國電燈 IChinaLight iCLight = new ChinaLight(); //初始化中國的電 IChinaElectricity iCElectricity = new ChinaElectricity(); //初始化日本電 IJapanElectricity iJElectricity =new JapanElectricity(); //使用適配器 IChinaElectricity iCAElectricity = new ElectricityAdapter(iJElectricity); //電壓正確電燈發(fā)光 Console.WriteLine(iCLight.Light(iCElectricity.Voltage())); //使用電壓適配器進(jìn)行適配 Console.WriteLine(iCLight.Light(iCAElectricity.Voltage())); //電壓不正確,電燈產(chǎn)生異常 Console.WriteLine(iCLight.Light(iJElectricity.Voltage())); }
通過適配器模式的定義可以知道,其實(shí)適配器模式無非是把一種已經(jīng)無法修改,或是修改成本較高的源角色通過適配角色轉(zhuǎn)換成目標(biāo)角色,這樣整個(gè)業(yè)務(wù)體系才能夠在代價(jià)最小的情況下進(jìn)行正常運(yùn)行。
適配器模式的優(yōu)點(diǎn):
適配器模式可以讓兩個(gè)沒有任何關(guān)系的類在一起運(yùn)行,只要適配器這個(gè)角色能夠搞定他們就行。
增加了類的透明性。
提高了類的復(fù)用度。
靈活性非常好。
適配器模式的使用場景:
適配器應(yīng)用場景只要記住一點(diǎn)就足夠了:你有動(dòng)機(jī)修改一個(gè)已經(jīng)投產(chǎn)中的接口時(shí),適配器模式可能是最適合你的模式。比如系統(tǒng)擴(kuò)展了,只需要一個(gè)已有或新建立的類,但這個(gè)類又不符合系統(tǒng)的接口,這個(gè)時(shí)候使用適配器模式比修改已存在的類代價(jià)要小的多。
關(guān)于C#如何解析適配器設(shè)計(jì)模式就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。