面試題 說說你理解的介面卡模式?

2021-09-25 04:53:15 字數 3145 閱讀 6568

前語:不要為了讀文章而讀文章,一定要帶著問題來讀文章,勤思考

面試題:說說你理解的介面卡模式?

在以前學習介面卡模式時,有個經典例子:就是有些電器的工作電壓不是220v, 比如電腦工作電壓20v,但是我們家庭用電的電壓是220。怎麼讓20v的電腦在220v的電壓下工作,這就需要乙個電源介面卡——俗稱充電器或變壓器。有了這個電源介面卡 家庭的用電電壓跟電腦的用電電壓 即可相容。

面試題:說說你理解的介面卡模式?

target(目標抽象類):目標抽象類定義客戶所需的介面,可以是乙個抽象類或介面,也可以是乙個具體的類。

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

adaptee(適配者類) :適配者即被適配的角色,它定義了已存在的介面,這個介面需要適配。一般是乙個具體的類,包含了客戶希望使用的業務方法,在某些情況下可能沒有適配者類的源**。

在介面卡模式結構圖我們可以看到 adapter(介面卡)和adaptee(適配者)是有一種關聯的,這種關聯可以是繼承關係,也可以是一種組合關係。繼承關係的我們一般稱為類介面卡模式; 組合關係的稱為物件介面卡模式。

定義乙個需要被適配的類。

定義乙個目標介面。

定義介面卡類, 因為是類介面卡模式,所以我們需要繼承adaptee類。

客戶端測試。

public static void main(string args )

輸出結果 :

將需要被適配的方法

這裡我們可以看到介面卡(adapter)繼承了適配者(adaptee),然後實現了目標介面(target)。這樣使目標介面跟適配者的介面就關聯起來了, 客戶端通過呼叫介面卡的方法,從而達到呼叫了適配者所被適配的方法。

物件介面卡模式跟類介面卡模式所不同的就是介面卡(adapter)類是基於繼承的,而物件介面卡是基於組合的。其他的target、adaptee不變。

定義介面卡類。

客戶端測試。

public static void main(string args )

輸出結果 :

將需要被適配的方法

一般常用的就是物件介面卡模式,很少用類介面卡。 還有一種雙向介面卡模式,就是(adapter)介面卡包含對目標類(target)和適配者類(adaptee)兩個引用。目標類可以通過介面卡(adapter)呼叫適配者(adaptee中的方法, 適配者類也可以通過介面卡呼叫目標類的方法。uml類圖如下。

面試題:說說你理解的介面卡模式?

介面卡(adapter)類一般寫法如下:

//同時對適配者和目標類的引用

private target target;

private adaptee adaptee;

public adapter(target target)

public adapter(adaptee adaptee)

@override

public void request()

@override

public void specificrequest()

}

在實際的開發中很少使用雙向介面卡。

預設介面卡模式是介面卡模式一種變體。

定義:當不需要實現乙個介面所提供的所有方法時,可以設計乙個抽象類實現該介面,並為每個介面提供乙個預設實現,那麼該抽象類的子類可以選擇性覆蓋父類中的方法,它適用於不想使用乙個介面中的所有方法的情況,又稱為單介面介面卡模式。

簡單的理解就是當適配者(adaptee)有大量的方法時,那麼每個介面卡(adapter)都要去實現介面中的這些方法,這樣就感覺太費勁。所以這種情況下,可以考慮實現個預設的介面卡,然後根據實際目標角色介面的類整合這個預設介面卡,然後選擇性的實現預設介面卡中的一些方法。

預設介面卡模式結構如下圖:

面試題:說說你理解的介面卡模式?

**serviceinte***ce(適配者介面) **:是乙個介面,裡面包含大量的方法。

**abstractserviceclass(預設介面卡類) **:實現了serviceinte***ce中宣告的方法, 通常定義為抽象類。

**concreteserviceclass(具體業務類) **:它是預設介面卡的子類,在沒有引用介面卡之前,它需要實現適配者(serviceinte***ce)所有的方法, 有了預設介面卡類後,就可以有選擇性的覆蓋介面卡類中的方法。

介面卡模式總共列出四種:類介面卡模式、 物件介面卡模式 、 雙向介面卡模式 、 預設介面卡模式。

1、優點

類介面卡模式和物件介面卡模式都具有的優點:

物件介面卡模式優點:

2、缺點

類介面卡模式缺點:

物件介面卡模式缺點:

與類介面卡模式相比,要在介面卡中置換適配者類的某些方法比較麻煩(因為類介面卡模式是基於繼承的,可以重寫適配者類的方法,物件介面卡模式則不能),如果一定要置換掉適配者類的方法,可以先做乙個適配者的子類,將適配者類的方法置換掉,然後再把適配者的子類當作真正的適配者進行適配,實現過程較為複雜。

3、適用場景

介面卡模式的理解

介面卡模式用於 系統的資料和行為都正確,但介面不符時,應該考慮用介面卡,目的是使控制範圍之外的乙個原有物件與某個介面匹配。介面卡模式主要應用於希望復用一些現存的類,但是介面又與復用環境要求不一致的情況,比如在需要對早期 復用一些功能等應用上很有實際價值。自己翻譯就是 已經有了乙個早期的抽象的介面或者...

python理解介面卡模式

介面卡模式 由於系統呼叫方式的原因,需要把不同類裡面的方法 名字不一樣 用同樣的方式來呼叫 coding utf 8 class bird def fly self print bird is flying class dog defbark self print dog is barking cl...

結合例子理解介面卡模式

介面卡模式 將乙個類的介面轉換成客戶希望的另外乙個介面。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。書本上給出了乙個很好的例子 nba裡面,姚明是乙個外籍中鋒,他和其他成員的語言不通,那麼他就需要翻譯者來 適配 他,最終使得他能夠很其他的成員一起打球 這裡講到的主要是...