設計模式-適配器模式

這篇文章講的是適配器模式,適配器模式其實在我們日常生活中就有許許多多的例子
例如插座轉接頭


這里寫圖片描述

車載充電器


這里寫圖片描述

還有許許多多其他的,我就不一一介紹了。其實設計模式中和真實世界中的適配器的作用都是一樣的,都是講一個結構轉換成另一個接口,以達到我們希望的結果。

介紹

適配器模式(Adapter Pattern## 標題 ##)是作為兩個不兼容的接口之間的橋梁。這種類型的設計模式屬于結構型模式,它結合了兩個獨立接口的功能。適配器模式將一個類的接口轉換成客戶希望的另外一個接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
適配器模式有兩種類型:類適配器模式和對象適配器模式。因為類適配器需要通過多重繼承進行適配,而JAVA又不支持多重繼承,所以這里主要講對象適配器,簡單介紹類適配器。

結構圖

對象適配器

這里寫圖片描述

類適配器

這里寫圖片描述

時序圖

這里寫圖片描述

案例

這里就用插座轉接頭做案例。
當插座上只有一個三孔插座,而我們的手機充電器是兩孔的,這時該怎么辦你?這時候我們就需要用一個兩孔插座轉三孔插座的適配器來適配了。如下圖


圖片來源于Head First 設計模式

充電器類

public class Charger{
    public void request(){
        System.out.println("我是兩孔插座的充電器!");
    }
}

插座接口

public interface Adaptee {
    void transaledRequest();
}

三孔插座類

public class ThreeAdaptee implements Adaptee{
    public void transaledRequest(){
        System.out.println("插入三孔插座!");
    }
}

適配器類

public class Adapter extends Charger {
    private Adaptee adaptee;
    
    public Adapter(Adaptee adaptee) {
        super();
        this.adaptee = adaptee;
    }

    @Override
    public void request() {
        super.request();
        System.out.println("兩孔轉三孔!"); 
        adaptee.transaledRequest();
    }
    
}

測試類

public class Client {
    public static void main(String[] args) {
        ThreeAdaptee adaptee = new ThreeAdaptee();
        Adapter adapter = new Adapter(adaptee);
        adapter.request();
    }
}

測試結果

這里寫圖片描述

代碼見Github地址
總結
--
適配器模式的主要優點是將目標類和適配者類解耦,增加了類的透明性和復用性,同時系統的靈活性和擴展性都非常好,更換適配器或者增加新的適配器都非常方便,符合“開閉原則”;類適配器模式的缺點是適配器類在很多編程語言中不能同時適配多個適配者類,對象適配器模式的缺點是很難置換適配者類的方法。
在類適配器模式中,適配器類實現了目標抽象類接口并繼承了適配者類,并在目標抽象類的實現方法中調用所繼承的適配者類的方法;在對象適配器模式中,適配器類繼承了目標抽象類并定義了一個適配者類的對象實例,在所繼承的目標抽象類方法中調用適配者類的相應業務方法。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 目錄 本文的結構如下: 什么是適配器模式 為什么要用該模式 模式的結構 代碼示例 優點和缺點 適用環境 模式應用 ...
    w1992wishes閱讀 893評論 0 3
  • 前言 買過港版手機的都知道,包裝盒里送的充電頭是港標的。和我們大陸日常使用的國標是不兼容的。也就是說,港版手機直接...
    soberbad閱讀 619評論 0 4
  • 定義 適配器模式把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在...
    步積閱讀 1,380評論 0 1
  • 一 概述 定義:適配器模式將某個類的接口轉換成客戶端期望的另一個接口表示,主的目的是兼容性,讓原本因接口不匹配不能...
    時待吾閱讀 499評論 0 0
  • 原文地址:LoveDev 適配器模式(Adapter Pattern):將一個接口轉換成調用者希望的另一個接口,使...
    KevinLive閱讀 295評論 0 0