最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# 設(shè)計模式系列教程-適配器模式

 更新時間:2016年06月01日 10:52:31   作者:Wang Juqiang  
通過適配器,客戶端可以調(diào)用同一接口,因而對客戶端來說是透明的。這樣做更簡單、更直接、更緊湊。

1. 概述

  將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以在一起工作。

2. 解決的問題

  即Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以在一起工作。

3. 模式中的角色

  3.1 目標接口(Target):客戶所期待的接口。目標可以是具體的或抽象的類,也可以是接口。

  3.2 需要適配的類(Adaptee):需要適配的類或適配者類。

  3.3 適配器(Adapter):通過包裝一個需要適配的對象,把原接口轉(zhuǎn)換成目標接口?! ?/p>

4. 模式解讀

  注:在GoF的設(shè)計模式中,對適配器模式講了兩種類型,類適配器模式和對象適配器模式。由于類適配器模式通過多重繼承對一個接口與另一個接口進行匹配,而C#、java等語言都不支持多重繼承,因而這里只是介紹對象適配器。

  4.1 適配器模式的類圖

http://img.jbzj.com/file_images/article/201606/2016060110534921.png

  4.2 適配器模式的代碼實現(xiàn)

 /// <summary>
 /// 定義客戶端期待的接口
 /// </summary>
 public class Target
 {
  /// <summary>
  /// 使用virtual修飾以便子類可以重寫
  /// </summary>
  public virtual void Request()
  {
   Console.WriteLine("This is a common request");
  }
 }

 /// <summary>
 /// 定義需要適配的類
 /// </summary>
 public class Adaptee
 {
  public void SpecificRequest()
  {
   Console.WriteLine("This is a special request.");
  }
 }

 /// <summary>
 /// 定義適配器
 /// </summary>
 public class Adapter:Target
 {
  // 建立一個私有的Adeptee對象
  private Adaptee adaptee = new Adaptee();

  /// <summary>
  /// 通過重寫,表面上調(diào)用Request()方法,變成了實際調(diào)用SpecificRequest()
  /// </summary>
  public override void Request()
  {
   adaptee.SpecificRequest();
  }
 }

  4.3 客戶端代碼

 class Program
 {
  static void Main(string[] args)
  {
   // 對客戶端來說,調(diào)用的就是Target的Request()
   Target target = new Adapter();
   target.Request();

   Console.Read();
  }
 }

  運行結(jié)果

http://img.jbzj.com/file_images/article/201606/2016060110534922.png

5. 模式總結(jié)

  5.1 優(yōu)點

    5.1.1 通過適配器,客戶端可以調(diào)用同一接口,因而對客戶端來說是透明的。這樣做更簡單、更直接、更緊湊。

    5.1.2 復(fù)用了現(xiàn)存的類,解決了現(xiàn)存類和復(fù)用環(huán)境要求不一致的問題。

    5.1.3 將目標類和適配者類解耦,通過引入一個適配器類重用現(xiàn)有的適配者類,而無需修改原有代碼。

    5.1.4 一個對象適配器可以把多個不同的適配者類適配到同一個目標,也就是說,同一個適配器可以把適配者類和它的子類都適配到目標接口。

  5.2 缺點

    對于對象適配器來說,更換適配器的實現(xiàn)過程比較復(fù)雜。

  5.3 適用場景

    5.3.1 系統(tǒng)需要使用現(xiàn)有的類,而這些類的接口不符合系統(tǒng)的接口。

    5.3.2 想要建立一個可以重用的類,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類,包括一些可能在將來引進的類一起工作。

    5.3.3 兩個類所做的事情相同或相似,但是具有不同接口的時候。

    5.3.4 舊的系統(tǒng)開發(fā)的類已經(jīng)實現(xiàn)了一些功能,但是客戶端卻只能以另外接口的形式訪問,但我們不希望手動更改原有類的時候。

    5.3.5 使用第三方組件,組件接口定義和自己定義的不同,不希望修改自己的接口,但是要使用第三方組件接口的功能。

6. 適配器應(yīng)用舉例

  6.1 使用過ADO.NET的開發(fā)人員應(yīng)該都用過DataAdapter,它就是用作DataSet和數(shù)據(jù)源之間的適配器。DataAdapter通過映射Fill和Update來提供這一適配器。

  6.2 手機電源適配器


以上就是本文的全部內(nèi)容,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C# 根據(jù)字符串生成二維碼的實例代碼

    C# 根據(jù)字符串生成二維碼的實例代碼

    這篇文章主要介紹了C# 根據(jù)字符串生成二維碼的實例,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 淺析C# 委托(Delegate)

    淺析C# 委托(Delegate)

    這篇文章主要介紹了C# 委托(Delegate)的相關(guān)資料,文中講解非常詳細,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#正則匹配RegexOptions選項的組合使用方法

    C#正則匹配RegexOptions選項的組合使用方法

    本文主要簡單介紹RegexOptions各種選項的作用,并介紹如何組合使用,為初學(xué)者解除一些疑惑。
    2016-04-04
  • C# 多線程學(xué)習(xí)之基礎(chǔ)入門

    C# 多線程學(xué)習(xí)之基礎(chǔ)入門

    線程(英語:thread)是操作系統(tǒng)能夠進行運算調(diào)度的最小單位。它被包含在進程之中,是進程中的實際運作單位。今天小編就帶大家了解一下C#中的多線程,快來學(xué)習(xí)一下吧
    2021-12-12
  • c#中虛函數(shù)的相關(guān)使用方法

    c#中虛函數(shù)的相關(guān)使用方法

    若一個實例方法聲明前帶有virtual關(guān)鍵字,那么這個方法就是虛方法。
    2013-02-02
  • C#內(nèi)插字符串的簡單使用

    C#內(nèi)插字符串的簡單使用

    這篇文章主要為大家詳細介紹了C#內(nèi)插字符串的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • c# 實現(xiàn)模糊PID控制算法

    c# 實現(xiàn)模糊PID控制算法

    這篇文章主要介紹了c# 實現(xiàn)模糊PID控制算法的示例代碼,幫助大家更好的理解和使用c#編程語言,感興趣的朋友可以了解下
    2020-12-12
  • 關(guān)于C#數(shù)強轉(zhuǎn)會不會拋出異常詳解

    關(guān)于C#數(shù)強轉(zhuǎn)會不會拋出異常詳解

    這篇文章主要給大家介紹了關(guān)于C#數(shù)強轉(zhuǎn)會不會拋出異常的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • c#讀寫excel文件使用示例

    c#讀寫excel文件使用示例

    這篇文章主要介紹了c#讀寫excel文件使用示例,需要的朋友可以參考下
    2014-02-02
  • DevExpress TreeList 常見問題解決方法

    DevExpress TreeList 常見問題解決方法

    這篇文章主要介紹了DevExpress TreeList 常見問題解決方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12

最新評論

津南区| 康保县| 禄丰县| 敦化市| 土默特左旗| 巨鹿县| 乌拉特前旗| 酉阳| 怀安县| 宁明县| 湟中县| 漳州市| 曲靖市| 阿荣旗| 建宁县| 新平| 襄汾县| 阜南县| 东源县| 巫溪县| 阿荣旗| 视频| 佳木斯市| 沂源县| 南康市| 都昌县| 吉林省| 罗山县| 象州县| 信丰县| 穆棱市| 建德市| 宿迁市| 沧源| 青神县| 靖安县| 东乡族自治县| 桓仁| 邵阳市| 阿拉善左旗| 精河县|