設計模式之介面卡模式

2021-09-20 18:49:31 字數 2330 閱讀 6290

介面卡模式:將乙個類的介面轉換成客戶希望的另乙個介面。介面卡模式讓那些介面不相容的類可以一起工作

介面卡模式中通常包括三類角色:

1:target(目標介面):目標抽象類定義客戶所需的介面,可以是乙個抽象類或介面,也可以是具體類。在類介面卡中,由於c#語言不支援多重繼承,所以它只能是介面。

2:adapter(介面卡):它可以呼叫另乙個介面,作為乙個轉換器,對adaptee和target進行適配。它是介面卡模式的核心。

3:adaptee(源角色):適配者即被適配的角色,也就是需要適配的物件,它定義了乙個已經存在的介面,這個介面需要適配,適配者類包好了客戶希望的業務方法。

預設介面卡模式

首先,我們先看看最簡單的介面卡模式預設介面卡模式(default adapter)是怎麼樣的。

public inte***ce filealterationlistener
此介面的一大問題是抽象方法太多了,如果我們要用這個介面,意味著我們要實現每乙個抽象方法,如果我們只是想要監控資料夾中的檔案建立和檔案刪除事件,可是我們還是不得不實現所有的方法,很明顯,這不是我們想要的。

所以,我們需要下面的乙個介面卡,它用於實現上面的介面,但是所有的方法都是空方法,這樣,我們就可以轉而定義自己的類來繼承下面這個類即可。

public class filealterationlisteneradaptor implements filealterationlistener 

public void ondirectorycreate(final file directory)

public void ondirectorychange(final file directory)

public void ondirectorydelete(final file directory)

public void onfilecreate(final file file)

public void onfilechange(final file file)

public void onfiledelete(final file file)

public void onstop(final filealterationobserver observer)

}

比如我們可以定義以下類,我們僅僅需要實現我們想實現的方法就可以了:

通過繼承的方法,介面卡自動獲得了所需要的大部分方法。這個時候,客戶端使用更加簡單,直接 target t = new someadapter(); 就可以了。

類適配和物件適配的異同

乙個採用繼承,乙個採用組合;

類適配屬於靜態實現,物件適配屬於組合的動態實現,物件適配需要多例項化乙個物件。

總體來說,物件適配用得比較多。

優點:1:將目標類和適配者類解耦,通過引入乙個介面卡類來重用現有的適配者類,無需修改原有結構。

2:增加了類的透明性和復用性,將具體的業務實現過程封裝在適配者類中,對於客戶端類而言是透明的,而且提高了適配者的復用性,同一適配者類可以在多個不同的系統中復用。

3:靈活性和擴充套件性都非常好,通過使用配置檔案,可以很方便的更換介面卡,也可以在不修改原有**的基礎上 增加新的介面卡,完全復合開閉原則。

缺點:

1:一次最多只能適配乙個適配者類,不能同時適配多個適配者。

2:適配者類不能為最終類

3:目標抽象類只能為介面,不能為類,其使用有一定的侷限性。

比較這兩種模式,其實是比較物件介面卡模式和**模式,在**結構上,它們很相似,都需要乙個具體的實現類的例項。但是它們的目的不一樣,**模式做的是增強原方法的活;介面卡做的是適配的活,為的是提供「把雞包裝成鴨,然後當做鴨來使用」,而雞和鴨它們之間原本沒有繼承關係。

設計模式之介面卡模式(類介面卡模式)

介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...

設計模式之 介面卡模式

1,介面卡模式把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法一起工作的兩個類能夠在一起工作 2,介面卡模式有兩種 1 類的介面卡模式 介面卡類繼承源類 這樣介面卡類就繼承了源類有的方法 並實現目標介面,實現在源類中沒有而在介面中有的方法,從而實現介面卡類有目標介面的所有方...

設計模式之介面卡模式

介面卡模式定義 將乙個類的介面,轉換成客戶期望的另乙個介面。介面卡讓原本介面不相容的類可以合作無間。簡單定義 封裝物件,並提供不同的介面。簡單例子 鴨子介面 package headfirst.adapter.ducks public inte ce duck 具體鴨子 package headfi...