C#設計模式系列介面卡模式教程介紹

來源:果殼範文吧 1.28W

1. 概述

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

2. 解決的問題

即Adapter模式使得原本由於介面不相容而不能一起工作的那些類可以在一起工作。

3. 模式中的角色

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

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

3.3 介面卡(Adapter):通過包裝一個需要適配的物件,把原介面轉換成目標介面。

4. 模式解讀

注:在GoF的設計模式中,對介面卡模式講了兩種型別,類介面卡模式和物件介面卡模式。由於類介面卡模式通過多重繼承對一個介面與另一個介面進行匹配,而C#、java等語言都不支援多重繼承,因而這裡只是介紹物件介面卡。

4.1 介面卡模式的類圖

C#設計模式系列介面卡模式教程介紹

4.2 介面卡模式的程式碼實現

///

/// 定義客戶端期待的介面 ///

public class Target { ///

/// 使用virtual修飾以便子類可以重寫 ///

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

/// 定義需要適配的類 ///

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

/// 定義介面卡 ///

public class Adapter:Target { // 建立一個私有的Adeptee物件 private Adaptee adaptee = new Adaptee(); ///

/// 通過重寫,表面上呼叫Request()方法,變成了實際呼叫SpecificRequest() ///

public override void Request() { ificRequest(); } }

4.3 客戶端程式碼

class Program { static void Main(string[] args) { // 對客戶端來說,呼叫的就是Target的Request() Target target = new Adapter(); est(); (); } }

執行結果

C#設計模式系列介面卡模式教程介紹 第2張

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 使用過的開發人員應該都用過DataAdapter,它就是用作DataSet和資料來源之間的介面卡。DataAdapter通過對映Fill和Update來提供這一介面卡。

6.2 手機電源介面卡

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

熱門標籤