解析C#設計形式編程中適配器形式的完成。本站提示廣大學習愛好者:(解析C#設計形式編程中適配器形式的完成)文章只能為提供參考,不一定能成為您想要的結果。以下是解析C#設計形式編程中適配器形式的完成正文
在現實的軟件體系設計和開辟中,為了完成某項任務須要購置一個第三方的庫來加速開辟。這帶來一個成績,在運用法式中曾經設計好的功效接口,與這個第三方供給的接口紛歧致。為了使得這些接口不兼容的類可以在一路任務,適配器形式供給了一種接口的適配機制。
適配器形式的設計思惟在生涯中常常會運用到,如我們在給手機充電的時刻,弗成能直接在220V電源上直接充電,而是用手機充電器轉換成手機須要的電壓才可以正常充電,不然就弗成以完成充電,這個充電器就起到了適配的感化。
1、適配器形式簡介
1.1、界說
適配器形式是經由過程一個類的接口轉換成客戶願望的別的一個接口,使本來因為接口不兼容而不克不及一路任務的那些類可以一路任務。
適配器從構造上可以分為類適配器和對象適配器。個中類適配器應用繼續關系來對類停止適配,而對象適配器是應用對象援用的辦法來停止適配的。
C#完成類適配器時,Target只能是接口。完成對象適配器時,Target可所以籠統類也能夠是接口。
1.2、應用頻率
2、適配器形式構造
2.1、構造圖
2.2、介入者
適配器形式介入者:
在適配器形式中,類Adapter完成適配器的功效,它在Client於Adaptee之間參加Adapter,如許Client把要求發給接口為Target的類Adapter,再由Adapter挪用Adaptee,從而完成Client挪用Adaptee。
3、類的適配器形式完成
在這裡以生涯中的一個例子來停止演示適配器形式的完成,詳細場景是: 在生涯中,我們買的電器插頭是2個孔的,然則我們買的插座只要三個孔的,此時我們就願望電器的插頭可以轉換為三個孔的就好,如許我們便可以直接把它插在插座上,此時三個孔插頭就是客戶端等待的另外一種接口,天然兩個孔的插頭就是現有的接口,適配器形式就是用來完成這類轉換的,詳細完成代碼以下:
using System; /// 這裡以插座和插頭的例子來诠釋適配器形式 /// 如今我們買的電器插頭是2個孔,然則我們買的插座只要3個孔的 /// 這是我們想把電器插在插座上的話就須要一個電適配器 namespace 設計形式之適配器形式 { /// <summary> /// 客戶端,客戶想要把2個孔的插頭 改變成三個孔的插頭,這個改變交給適配器就好 /// 既然適配器須要完成這個功效,所以它必需同時詳細2個孔插頭和三個孔插頭的特點 /// </summary> class Client { static void Main(string[] args) { // 如今客戶端可以經由過程電適配要應用2個孔的插頭了 IThreeHole threehole = new PowerAdapter(); threehole.Request(); Console.ReadLine(); } } /// <summary> /// 三個孔的插頭,也就是適配器形式中的目的腳色 /// </summary> public interface IThreeHole { void Request(); } /// <summary> /// 兩個孔的插頭,源腳色——須要適配的類 /// </summary> public abstract class TwoHole { public void SpecificRequest() { Console.WriteLine("我是兩個孔的插頭"); } } /// <summary> /// 適配器類,接口要放在類的前面 /// 適配器類供給了三個孔插頭的行動,但其實質是挪用兩個孔插頭的辦法 /// </summary> public class PowerAdapter:TwoHole,IThreeHole { /// <summary> /// 完成三個孔插頭接口辦法 /// </summary> public void Request() { // 挪用兩個孔插頭辦法 this.SpecificRequest(); } } }
從下面代碼中可以看出,客戶端願望挪用Request辦法(即三個孔插頭),然則我們現有的類(即2個孔的插頭)並沒有Request辦法,它只要SpecificRequest辦法(即兩個孔插頭自己的辦法),但是適配器類(適配器必需完成三個孔插頭接口和繼續兩個孔插頭類)可以供給這類轉換,它供給了Request辦法的完成(其外部挪用的是兩個孔插頭,由於適配器只是一個外殼而已,包裝著兩個孔插頭(由於只要如許,電器能力應用),並向外界供給三個孔插頭的外不雅,)以供客戶端應用。
4、對象的適配器形式
下面都是類的適配器形式的引見,但是適配器形式還有別的一種情勢——對象的適配器形式,這裡就詳細講授下它的完成,完成的剖析思緒:既然如今適配器類不克不及繼續TwoHole籠統類了(由於用繼續就屬於類的適配器了),然則適配器類不管若何都要完成客戶端等待的辦法的,即Request辦法,所以必定是要繼續ThreeHole籠統類或IThreeHole接口的,但是適配器類的Request辦法又必需挪用TwoHole的SpecificRequest辦法,又不克不及用繼續,這時候候就想,不克不及繼續,然則我們可以在適配器類中創立TwoHole對象,然後在Requst中應用TwoHole的辦法了。正如我們剖析的那樣,對象的適配器形式的完成正式如斯。上面就讓我看看詳細完成代碼:
namespace 對象的適配器形式
{ class Client { static void Main(string[] args) { // 如今客戶端可以經由過程電適配要應用2個孔的插頭了 ThreeHole threehole = new PowerAdapter(); threehole.Request(); Console.ReadLine(); } } /// <summary> /// 三個孔的插頭,也就是適配器形式中的目的(Target)腳色 /// </summary> public class ThreeHole { // 客戶端須要的辦法 public virtual void Request() { // 可以把普通完成放在這裡 } } /// <summary> /// 兩個孔的插頭,源腳色——須要適配的類 /// </summary> public class TwoHole { public void SpecificRequest() { Console.WriteLine("我是兩個孔的插頭"); } } /// <summary> /// 適配器類,這裡適配器類沒有TwoHole類, /// 而是援用了TwoHole對象,所所以對象的適配器形式的完成 /// </summary> public class PowerAdapter : ThreeHole { // 援用兩個孔插頭的實例,從而將客戶端與TwoHole接洽起來 public TwoHole twoholeAdaptee = new TwoHole(); /// <summary> /// 完成三個孔插頭接口辦法 /// </summary> public override void Request() { twoholeAdaptee.SpecificRequest(); } } }