亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

解析C#設計模式編程中適配器模式的實現

2020-01-24 01:16:17
字體:
來源:轉載
供稿:網友

在實際的軟件系統設計和開發中,為了完成某項工作需要購買一個第三方的庫來加快開發。這帶來一個問題,在應用程序中已經設計好的功能接口,與這個第三方提供的接口不一致。為了使得這些接口不兼容的類可以在一起工作,適配器模式提供了一種接口的適配機制。


  適配器模式的設計思想在生活中經常會應用到,如我們在給手機充電的時候,不可能直接在220V電源上直接充電,而是用手機充電器轉換成手機需要的電壓才可以正常充電,否則就不可以完成充電,這個充電器就起到了適配的作用。

1、適配器模式簡介

1.1、定義

  適配器模式是通過一個類的接口轉換成客戶希望的另外一個接口,使原本由于接口不兼容而不能一起工作的那些類可以一起工作。

  適配器從結構上可以分為類適配器和對象適配器。其中類適配器使用繼承關系來對類進行適配,而對象適配器是使用對象引用的方法來進行適配的。

  C#實現類適配器時,Target只能是接口。實現對象適配器時,Target可以是抽象類也可以是接口。

1.2、使用頻率

2016217154620830.gif (101×20)

2、適配器模式結構

2.1、結構圖

2016217154702639.png (522×285)

2.2、參與者

  適配器模式參與者:

  •   Target:Client所使用的與特定領域相關的接口。
  •   Client:與符合Target接口的對象協調的類。
  •   Adaptee:需要適配的類接口。
  •   Adapter:適配器,負責Adaptee的接口與Target接口進行適配。

  在適配器模式中,類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();    }  }}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美肥臀大乳一区二区免费视频| 久久精品男人天堂| 亚洲第一天堂无码专区| 国产精品国产三级国产aⅴ浪潮| 日韩精品福利网站| 国产美女精品视频| 欧美激情第三页| 日本电影亚洲天堂| 国产一区二区在线免费| 亚洲精品v欧美精品v日韩精品| 亚洲欧美日本伦理| 国内精品免费午夜毛片| 国产suv精品一区二区三区88区| 欧美日韩一区二区三区在线免费观看| 性欧美亚洲xxxx乳在线观看| 欧美福利视频网站| 久久免费视频这里只有精品| 久久精品亚洲热| 亚洲免费电影在线观看| 久久精品国产综合| 国产精品永久免费观看| 国产成人精品一区二区三区| 久久久国产在线视频| 亚洲国产精品va在线观看黑人| 68精品久久久久久欧美| 成人观看高清在线观看免费| 91综合免费在线| 国产精品国产三级国产aⅴ浪潮| 亚洲精品免费av| 伊人久久大香线蕉av一区二区| 欧美肥老妇视频| 国产精品一区二区久久国产| 国产成人一区二区三区| 亚洲国产成人精品电影| 欧美日韩国产黄| 91国产精品视频在线| 国产在线视频不卡| 欧美极品美女视频网站在线观看免费| 亚洲天堂日韩电影| 国产精品久久久久久久久男| 久热精品视频在线免费观看| 最近免费中文字幕视频2019| 国产精品尤物福利片在线观看| x99av成人免费| 91精品免费久久久久久久久| 成人免费视频97| 亚洲护士老师的毛茸茸最新章节| 久久久噜久噜久久综合| 久久久精品国产一区二区| 欧美黄色片免费观看| 九九热r在线视频精品| 欧美午夜激情在线| 色综合久久久久久中文网| 国产欧洲精品视频| 欧美乱人伦中文字幕在线| 欧美激情综合色| 欧美在线激情视频| 久久99久久99精品免观看粉嫩| 日日狠狠久久偷偷四色综合免费| 国产精品高潮粉嫩av| 久久伊人91精品综合网站| 在线电影av不卡网址| 日韩欧美在线中文字幕| 日本精品视频网站| 亚洲精品自拍视频| 狠狠久久亚洲欧美专区| 欧美疯狂性受xxxxx另类| 久久国内精品一国内精品| 亚洲国产日韩精品在线| 久久精品91久久香蕉加勒比| 日韩中文在线中文网在线观看| 亚洲精品视频在线播放| 欧洲美女7788成人免费视频| 国产美女直播视频一区| 国产精品免费一区| 国产精品99蜜臀久久不卡二区| 国产女同一区二区| 亚洲自拍高清视频网站| 国产做受高潮69| 日本精品久久久久久久| 日韩av在线免播放器| 国产欧美日韩最新| 国产精品亚发布| 黄色一区二区在线| 欧美激情一区二区三区高清视频| 欧美中文在线视频| 欧美日韩在线观看视频| 日韩电影免费观看在线观看| 疯狂蹂躏欧美一区二区精品| 欧美午夜精品久久久久久人妖| 日韩少妇与小伙激情| 日韩电影免费观看在线| www国产亚洲精品久久网站| 久久久久久中文字幕| 亚洲成人教育av| 欧美精品aaa| 国产美女直播视频一区| 欧洲美女免费图片一区| 日韩av在线直播| 成人福利在线观看| 国产精彩精品视频| 精品久久久久久亚洲国产300| 欧美自拍视频在线| 亚洲精品国产精品乱码不99按摩| 亚洲free性xxxx护士hd| 深夜精品寂寞黄网站在线观看| 7m第一福利500精品视频| 日本精品久久久| 8x拔播拔播x8国产精品| 国内精品久久久久影院优| 欧美wwwxxxx| 亚洲人成网7777777国产| 欧美成人精品三级在线观看| 久久夜精品香蕉| 亚洲欧美精品在线| 久久久精品国产一区二区| 欧美一区三区三区高中清蜜桃| 欧美极品少妇xxxxⅹ喷水| 成人黄色av免费在线观看| 精品久久久久久久大神国产| 欧美精品在线播放| 一本色道久久综合亚洲精品小说| 欧美中文字幕视频在线观看| 亚洲自拍另类欧美丝袜| 在线精品高清中文字幕| 国产成人亚洲综合91精品| 成人亲热视频网站| 国内精品在线一区| 一区二区三区日韩在线| 国产精品成人免费电影| 久久精品视频网站| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲天堂免费在线| 精品久久香蕉国产线看观看gif| 国产成人在线亚洲欧美| 欧美成人精品不卡视频在线观看| **欧美日韩vr在线| 久久久视频免费观看| 中文字幕精品视频| 亚洲国产成人91精品| 亚洲tv在线观看| 欧美日韩国产激情| 2019国产精品自在线拍国产不卡| 大胆欧美人体视频| 不卡av电影在线观看| 欧美大全免费观看电视剧大泉洋| 中文.日本.精品| 欧美日韩在线视频观看| 色噜噜狠狠色综合网图区| 久久久视频免费观看| 中文国产成人精品久久一| 欧美成人一区在线| 精品国内产的精品视频在线观看| 国产自产女人91一区在线观看| 久久久久久久久久久av| 最近2019免费中文字幕视频三| 国产亚洲日本欧美韩国| 亚洲久久久久久久久久久| 中文字幕免费精品一区| 国产精品入口福利| 97国产精品视频人人做人人爱| 久久国产精品免费视频| 奇门遁甲1982国语版免费观看高清| 俺去啦;欧美日韩|