一文掌握介面卡設計模式,UML圖解原始碼簡單易懂

碼農談IT發表於2023-11-24

來源:mikechen的網際網路架構

設計模式是寫出優秀程式的保障,與架構能力與閱讀原始碼的能力息息相關,對程式設計師來說非常重要,非常值得深入學習。

前面,我們介紹了:

 7 大設計原則(41張圖解、2萬多字)

5 大建立型設計模式總結,20 張圖徹底掌握



01
  適配型模式的概述

介面卡模式結構型設計模式,它的作用是連線現有程式和所需程式

當現有功能元件與當前系統的介面規範不相容,無法直接使用時,重新開發的成本又很高,需要轉換後才能使用,介面卡模式很好地解決了這個問題。

這個描述有點抽象,列舉一個日常生活中的常見例子。

例如:

蘋果手機和華為手機的充電介面是不相容的,如果要用華為的充電器給蘋果手機充電,這時就需要轉換接頭進行適配。

一文掌握介面卡設計模式,UML圖解原始碼簡單易懂

隨意找了一張圖,這裡只是為了說明這個道理。

02
  適配型模式的UML 類圖

介面卡模式分為兩種:物件介面卡模式、類介面卡模式

國際慣例,先上手撕的 UML 類圖。

1)物件介面卡模式

物件介面卡的 UML 類圖:

一文掌握介面卡設計模式,UML圖解原始碼簡單易懂


物件的介面卡模式的優點是靈活性高、低耦合。

其缺點是使用複雜,需要引入物件例項。

2)類介面卡模式

類介面卡模式的 UML 類圖:

應用相對少,因為耦合度較高,且要求我們瞭解現有元件庫中的相關元件的內部結構。

一文掌握介面卡設計模式,UML圖解原始碼簡單易懂


類介面卡模式的優點是使用方便,程式碼簡化,僅僅引入一個物件,並不需要額外的欄位來引用 Adaptee 例項。

其缺點是高耦合,靈活性低,使用物件繼承的方式,是靜態的定義方式。

3)介面卡模式的構成

介面卡模式的構成主要為 3 個部分:

  • Target:介面卡的內容,例如客戶端使用的目標介面;

  • Adaptee:被適配的內容,例如不相容的介面;

  • Adapter:介面卡,把 Adeptee 適配成 Target


03
  適配型模式的使用例項

假設:

為了改進專案的 log 系統,我們需要開發一個三方開源日誌庫。

但這個三方開源日誌庫與專案中的介面不相容,為了解決這個問題,下面用介面卡模式來完成這個功能。

1) 確定目標介面

系統原來的日誌介面:




public interface LogFactory {    void debug(String tag,String message);}


2)三方開源日誌庫的介面及實現

下面是第三方開源日誌庫提供的日誌功能,它的介面與公司系統目前使用的不相容。











public interface Logger {    void d(int priority, String message, Object ... obj);}//具體提供日誌功能的實現類public class LoggerImp implements Logger {    @Override    public void d(int priority, String message, Object... obj) {        System.out.println(String.format("logger:%s",message));    }}


 

3)構建介面卡類

透過介面卡類,將第三方開源日誌庫提供的介面轉換為系統的目標介面。














public class LogAdapter implements LogFactory {    private Logger Logger;
   public LogAdapter(Logger Logger) {        this.Logger = Logger;    }
   @Override    public void debug(String tag, String message) {        Objects.requireNonNull(Logger);        Logger.d(1, message);    }}


LogAdapter 實現了系統的目標介面,同時持有三方庫 Logger 的引用。

4)客戶端使用

透過介面卡,客戶端很輕鬆就可以切換到新的日誌系統了。







public class AdapterClient {    public void recordLog() {        LogFactory logFactory = new LogAdapter(new LoggerImp());        logFactory.debug("Test", "使用logger列印log");    }}


 

04
  適配型模式的使用場景

  • 當需要使用一個現存的類,但它提供的介面與系統的介面不相容,並且還不能修改它時;

  • 使用第三方提供的元件,但元件介面定義和自己要求的介面定義不同時。

 

05
  適配型模式的優缺點

介面卡模式的優點:

  • 客戶端透過介面卡,可以透明地呼叫目標介面;

  • 複用了現存的類,不需要修改原有程式碼,就能重用現有的適配者類。

  • 將目標類和適配者類解耦,解決了目標類和適配者類介面不一致的問題。


介面卡模式的缺點:

  • 需要統一多個類的介面;

  • 新舊  API  的相容,改造成本高;

  • 過多使用介面卡,會讓系統程式碼變得凌亂,增加系統的複雜性。

 

總結
  

透過本文,我們瞭解並掌握了介面卡模式,包括介面卡模式的概念、作用、結構、使用場景、優缺點及應用等。

使

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024924/viewspace-2997001/,如需轉載,請註明出處,否則將追究法律責任。

相關文章