設計模式——適配器模式

設計模式——適配器模式

適配器模式,即通俗理解,適配無法直接使用的介面以便可以利用。

適配器模式把一個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。

適配器模式的組成角色

  • 目標角色(Target):適配所期待的得到的介面,目標角色可以是類或介面。這裡,我更傾向於是介面,因為我理解目標角色更傾向於一種介面規範。

  • 源角色(Adaptee):需要適配的介面或類。

  • 適配器(Adapter):適配器模式的核心。通過繼承或實現將源角色轉換成目標角色介面。

在設計模式總,適配器模式有兩種類型,類適配器模式和對象適配器模式。由於在Java中只支持單繼承,所以類適配器模式會有些限制。

Advertisements

類適配器模式

UML圖

通過上面的UML圖可以看到,適配器Adapter繼承自被適配類Adaptee,同時實現客戶端要求的標準介面Target。來看具體的實例:

定義標準的客戶端介面:

定義充電器類:

定義客戶端對象,電動車。

由於發電站發出來的電壓是220V,而電動車直接充電要求的是70V,所以需要將220V電壓進行降壓適配。

客戶端調用演示:

上面演示的就是類適配器模式。

對象適配器模式

對象的適配器模式把被適配的類的API轉換成為目標類的API,與類的適配器模式不同的是,對象的適配器模式不是使用繼承關係連接到Adaptee類,而是使用委派關係連接到Adaptee類。

UML圖

Advertisements

通過上面的UML圖中,我們可以看到,在適配器和被適配類之間用了關聯的關係作為連接,而不是繼承關係。這樣我們的目標介面就可是一個類或者介面進行實現。

在上面的例子中,我們稍加改造。

類適配和對象適配器對比

  1. 類適配器的靈活性不如對象適配器,類適配器通過繼承實現,對象適配器通過組合的方式實現,比較靈活。

  2. 類適配器通過繼承實現,無法兼顧被適配器Adaptee的子類。對象適配器可以定義一個Adaptee對象,然後可以創建一個指向子類的實現。

  3. 類適配器可以通過重寫父類方法進行改變Adaptee的實現。

適配器模式優缺點

優點

  • 提高了類的復用性,解決了現存類和復用環境要求不一致的問題

  • 將目標類和適配者類解耦,通過引入一個適配器類重用現有的適配者類,而無需修改原有代碼,增強了類的擴展性。

  • 通過適配器,客戶端可以調用同一介面,因而對客戶端來說是透明的。這樣做更簡單、更直接、更緊湊。

缺點

  • 適配器過多,造成系統過於複雜,所以要有目的地性的使用適配器模式。

使用場景:有動機地修改一個正常運行的系統的介面,這時應該考慮使用適配器模式。

注意事項:適配器不是在詳細設計時添加的,而是解決正在服役的項目的問題。

Advertisements

你可能會喜歡