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

時(shí)間:2022-06-28 06:19:18 設計 我要投稿
  • 相關(guān)推薦

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

  1. 概述

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

  2. 解決的問(wèn)題

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

  3. 模式中的角色

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

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

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

  4. 模式解讀

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

  4.1 適配器模式的類(lèi)圖

  4.2 適配器模式的代碼實(shí)現

  ///

/// 定義客戶(hù)端期待的接口 ///

public class Target { ///

/// 使用virtual修飾以便子類(lèi)可以重寫(xiě) ///

public virtual void Request() { Console.WriteLine("This is a common request"); } } ///

/// 定義需要適配的類(lèi) ///

public class Adaptee { public void SpecificRequest() { Console.WriteLine("This is a special request."); } } ///

/// 定義適配器 ///

public class Adapter:Target { // 建立一個(gè)私有的Adeptee對象 private Adaptee adaptee = new Adaptee(); ///

/// 通過(guò)重寫(xiě),表面上調用Request()方法,變成了實(shí)際調用SpecificRequest() ///

public override void Request() { adaptee.SpecificRequest(); } }

  4.3 客戶(hù)端代碼

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

  運行結果

  5. 模式總結

  5.1 優(yōu)點(diǎn)

  5.1.1 通過(guò)適配器,客戶(hù)端可以調用同一接口,因而對客戶(hù)端來(lái)說(shuō)是透明的。這樣做更簡(jiǎn)單、更直接、更緊湊。

  5.1.2 復用了現存的類(lèi),解決了現存類(lèi)和復用環(huán)境要求不一致的問(wèn)題。

  5.1.3 將目標類(lèi)和適配者類(lèi)解耦,通過(guò)引入一個(gè)適配器類(lèi)重用現有的適配者類(lèi),而無(wú)需修改原有代碼。

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

  5.2 缺點(diǎn)

  對于對象適配器來(lái)說(shuō),更換適配器的實(shí)現過(guò)程比較復雜。

  5.3 適用場(chǎng)景

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

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

  5.3.3 兩個(gè)類(lèi)所做的事情相同或相似,但是具有不同接口的時(shí)候。

  5.3.4 舊的系統開(kāi)發(fā)的類(lèi)已經(jīng)實(shí)現了一些功能,但是客戶(hù)端卻只能以另外接口的形式訪(fǎng)問(wèn),但我們不希望手動(dòng)更改原有類(lèi)的時(shí)候。

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

  6. 適配器應用舉例

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

  6.2 手機電源適配器

  以上就是本文的全部?jì)热,希望能給大家一個(gè)參考,也希望大家多多支持。

【C#設計模式系列適配器模式教程介紹】相關(guān)文章:

C#設計中單例模式實(shí)例講解06-29

Python設計模式:工廠(chǎng)方法模式講解06-29

設計模式課程設計報告07-03

常見(jiàn)的網(wǎng)頁(yè)布局設計模式07-14

實(shí)例講解Ruby使用設計模式中的裝飾器模式的方法參考06-29

C++編程中如何使用設計模式中的policy策略模式的例子講解06-29

環(huán)境設計專(zhuān)業(yè)教學(xué)模式分析07-03

汽車(chē)客運中心設計模式分析論文07-03

14種常見(jiàn)的網(wǎng)站模板設計模式07-14

未來(lái)Web 2.0模式下人才招聘模式假想07-03

99久久精品免费看国产一区二区三区|baoyu135国产精品t|40分钟97精品国产最大网站|久久综合丝袜日本网|欧美videosdesexo肥婆