国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C# 設計模式系列教程-適配器模式

2020-01-24 01:08:33
字體:
來源:轉載
供稿:網友

1. 概述

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

2. 解決的問題

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

3. 模式中的角色

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

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

  3.3 適配器(Adapter):通過包裝一個需要適配的對象,把原接口轉換成目標接口。  

4. 模式解讀

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

  4.1 適配器模式的類圖

http://files.VeVB.COm/file_images/article/201606/2016060110534921.png

  4.2 適配器模式的代碼實現

 /// <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>  /// 通過重寫,表面上調用Request()方法,變成了實際調用SpecificRequest()  /// </summary>  public override void Request()  {   adaptee.SpecificRequest();  } }

  4.3 客戶端代碼

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

  運行結果

http://files.VeVB.COm/file_images/article/201606/2016060110534922.png

5. 模式總結

  5.1 優點

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

    5.1.2 復用了現存的類,解決了現存類和復用環境要求不一致的問題。

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

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

  5.2 缺點

    對于對象適配器來說,更換適配器的實現過程比較復雜。

  5.3 適用場景

    5.3.1 系統需要使用現有的類,而這些類的接口不符合系統的接口。

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

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

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

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

6. 適配器應用舉例

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

  6.2 手機電源適配器


以上就是本文的全部內容,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贞丰县| 南岸区| 阳城县| 唐河县| 江阴市| 隆昌县| 遂平县| 龙海市| 黄大仙区| 佛山市| 科技| 宣城市| 民和| 青神县| 福海县| 岳西县| 平邑县| 桃江县| 湄潭县| 伊吾县| 金塔县| 留坝县| 富川| 黔江区| 灌南县| 绥滨县| 莎车县| 泰和县| 高邑县| 宁远县| 都匀市| 宁河县| 淅川县| 肇庆市| 麦盖提县| 凤山市| 大兴区| 龙游县| 黄骅市| 吉隆县| 新巴尔虎右旗|