在實際的軟體系統設計和開發中,為了完成某項工作需要購買乙個第三方的庫來加快開發。這帶來乙個問題,在應用程式中已經設計好的功能介面,與這個第三方提供的介面不一致。為了使得這些介面不相容的類可以在一起工作,介面卡模式提供了一種介面的適配機制。
介面卡模式的設計思想在生活中經常會應用到,如我們在給手機充電的時候,不可能直接在220v電源上直接充電,而是用手機充電器轉換成手機需要的電壓才可以正常充電,否則就不可以完成充電,這個充電器就起到了適配的作用。
1、介面卡模式簡介
1.1、定義
介面卡模式是通過乙個類的介面轉換成客戶希望的另外乙個介面,使原本由於介面不相容而不能一起工作的那些類可以一起工作。
介面卡從結構上可以分為類介面卡和物件介面卡。其中類介面卡使用繼承關係來對類進行適配,而物件介面卡是使用物件引用的方法來進行適配的。
c#實現類介面卡時,target只能是介面。實現物件介面卡時,target可以是抽象類也可以是介面。
1.2、使用頻率
2、介面卡模式結構
2.1、ufdvyz結構圖
2.2、參與者
介面卡模式參與者:
在介面卡模式中,類adapter實現介面卡的功能,它在client於adaptee之間加入adapter,這樣client把請求發給介面為target的類adapter,再由adapter呼叫adaptee,從而實現client呼叫adaptee。
3、類的介面卡模式實現
在這裡以生活中的乙個例子來進行演示介面卡模式的實現,具體場景是: 在生活中,我們買的電器插頭是2個孔的,但是我們買的插座只有三個孔的,此時我們就希望電器的插頭可以轉換為三個孔的就好,這樣我們就可以直接把它插在插座上,此時程式設計客棧三個孔插頭就是客戶端期待的另一種介面,自然兩個孔的插頭就是現有的介面,介面卡模式就是用來完成這種轉換的,具體實現**如下:
using system;
/// 這裡以插座和插頭的例子來詮釋介面卡模式
/// 現在我們買的電器插頭是2個孔,但是我們買的插座只有3個孔的
/// 這是我們想把電器插在插座上的話就需要乙個電介面卡
namespace 設計模式之介面卡模式
} ///
/// 三個孔的插頭,也就是介面卡模式中的目標角色
///
public inte***ce ithreehole
///
/// 兩個孔的插頭,源角色——需要適配的類
///
public abstract class twohole
}///
/// 介面卡類,介面要放在類的後面
/// 介面卡類提供了三個孔插頭的行為,但其本質是呼叫兩個孔插頭的方法
///
public class poweradapter:twohole,ithreehole}}
從上面**中可以看出,客戶端希望呼叫request方法(即三個孔插頭),但是我們現有的類(即2個孔的插頭)並沒有request方法,它只有specificrequest方法(即兩個孔插頭本身的方法),然而介面卡類(介面卡必須實現三個孔插頭介面和繼承兩個孔插頭類)可以提供這種轉換,它提供了request方法的實現(其內部呼叫的是兩個孔插頭,因為介面卡只是乙個外殼罷了,包裝著兩個孔插頭(因為只有這樣,電器才能使用),並向外界提供三個孔插頭的外觀,)以供客戶端使用。
4、物件的介面卡模式
上面都是類的介面卡模式的介紹,然而介面卡模式還有另外一種形式——物件的介面卡模式,這裡就具體講解下它的實現,實現的分析思路:既然現在介面卡類不能繼承twohole抽象類了(因為用繼承就屬於類的介面卡了),但是介面卡類無論如何都要實現客戶端期待的方法的,即request方法,所以一定是要繼承threehole抽象類或ithreehole介面的,然而介面卡類的request方法又必須呼叫twohole的specificrequest方法,又不能用繼承,這時候就想,不能繼承,但是我們可以在介面卡類中建立twohole物件,然後在requst中使用twohole的方法了。正如我們分析的那樣,物件的介面卡模式的實現正式如此。下面就讓我看看具體實現**:
namespace 物件的介面卡模式
} ///
/// 三個孔的插頭,也就是介面卡模式中的目標(target)角色
///
public class threehole
}///
/// 兩個孔的插頭,源角色——需要適配的類
///
public class twohole
}///
/// 介面卡類,這裡介面卡類沒有twohole類,
/// 而是引用了twohole物件,所以是物件的介面卡模式的實現
///
public class poweradapter : threehole}}
本文標題: 解析c#設計模式程式設計中介面卡模式的實現
本文位址: /ruanjian/csharp/142648.html
設計模式解析之介面卡模式
將各種截然不同的函式介面封裝成統一的api。php中的資料庫操作有mysql,mysqli,pdo三種,可以用介面卡模式統一成一致,使不同的資料庫操作,統一成一樣的api。類似的場景還有cache介面卡,可以將memcache,redis,file,apc等不同的快取函式,統一成一致。首先定義乙個介...
C 設計模式 介面卡模式
生活中的介面卡 買膝上型電腦,買手機時,都有乙個電源介面卡,電源介面卡又叫外接電源,是小型可攜式電子裝置及電子電器的供電電壓變換裝置,常見於手機,膝上型電腦上。它的作用是將家裡的220v高電壓轉換成這些電子產品能工作的5v 20v左右穩定的低電壓,使它們能正常工作。就是說,如果沒有這個電源介面卡,我...
C 設計模式 介面卡模式
生活中的介面卡 買膝上型電腦,買手機時,都有乙個電源介面卡,電源介面卡又叫外接電源,是小型可攜式電子裝置及電子電器的供電電壓變換裝置,常見於手機,膝上型電腦上。它的作用是將家裡的220v高電壓轉換成這些電子產品能工作的5v 20v左右穩定的低電壓,使它們能正常工作。就是說,如果沒有這個電源介面卡,我...