1. 程式人生 > >大話設計模式八:介面卡模式

大話設計模式八:介面卡模式

一.模式定義

物件結構型模式,類結構型設計模式。  

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

Adapter Pattern: Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces. 

二.模式要素

1.Target:目標抽象類  

2.Adapter:介面卡類  

3.Adaptee:適配者類  

4.Client:客戶類

三.舉例說明

電腦充電器大家一定見過,其實它就是一種非常典型的介面卡。國內的家用插座電壓統一是220V。那如果直接將220V的電壓通到你的膝上型電腦裡估計電腦會炸,所以必須使用電源介面卡使得電壓能夠降到5V,這樣才能給電腦正常使用。

其實介面卡的實現分為兩種:類介面卡、物件介面卡。

1.類介面卡模式

2.物件介面卡模式

四.模式例項

1.類介面卡模式例項

Voltage220V.java    220V電壓類

public class Voltage220V {
    int voltage = 220;

    public int supplyVoltage220V() {
        return voltage;
    }
}

Voltage5V.java    5V電壓介面

public interface Voltage5V {
    public int supplyVoltage5V();
}

VoltageAdapter.java    類介面卡

public class VoltageAdapter extends Voltage220V implements Voltage5V {

    @Override
    public int supplyVoltage5V() {
        int initialVoltage = supplyVoltage220V();
        System.out.println("開始適配電壓,初始電壓為" + initialVoltage + "V");
        int realVolatege = initialVoltage / 44;
        System.out.println("適配電壓結束,真實電壓為" + realVolatege + "V");
        return realVolatege;
    }
}

Main.java    呼叫者

public class Main {
    public static void main(String[] args) {
        // 無需適配電壓
        Voltage220V voltage220V = new Voltage220V();
        int voltage1 = voltage220V.supplyVoltage220V();
        System.out.println("當前電壓為" + voltage1 + "V" + "\n");

        // 適配電壓
        VoltageAdapter adapter = new VoltageAdapter();
        int voltage2 = adapter.supplyVoltage5V();
        System.out.println("當前電壓為" + voltage2 + "V");
    }
}

執行結果:

2.物件介面卡模式例項

VoltageAdapter2.java

public class VoltageAdapter2 implements Voltage5V {
    private Voltage220V voltage220V;

    public VoltageAdapter2(Voltage220V voltage220V) {
        this.voltage220V = voltage220V;
    }

    @Override
    public int supplyVoltage5V() {
        int realVoltage = 0;
        if(voltage220V != null) {
            int initialVoltage = voltage220V.supplyVoltage220V();
            System.out.println("開始適配電壓,初始電壓為" + initialVoltage + "V");
            realVoltage = initialVoltage / 44;
            System.out.println("適配電壓結束,真實電壓為" + realVoltage + "V");
        }
        return realVoltage;
    }
}

Main.java

public class Main {
    public static void main(String[] args) {
        // 無需適配電壓
        Voltage220V voltage220V = new Voltage220V();
        int voltage1 = voltage220V.supplyVoltage220V();
        System.out.println("當前電壓為" + voltage1 + "V" + "\n");

        // 適配電壓
//        VoltageAdapter adapter = new VoltageAdapter();
//        int voltage2 = adapter.supplyVoltage5V();
//        System.out.println("當前電壓為" + voltage2 + "V");

        // 適配電壓
        VoltageAdapter2 voltageAdapter2 = new VoltageAdapter2(new Voltage220V());
        int voltage3 = voltageAdapter2.supplyVoltage5V();
        System.out.println("當前電壓為" + voltage3 + "V");
    }
}

執行結果:

五.總結

1.介面卡模式的優點

(1)將目標類和適配者類解耦,通過引入一個介面卡類來重用現有的適配者類,而無須修改原有程式碼。

(2)增加了類的透明性和複用性,將具體的實現封裝在適配者類中,對於客戶端類來說是透明的,而且提高了適配者的複用性。

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

類介面卡優點:

中由於介面卡類是適配者類的子類,因此可以在介面卡類中置換一些適配者的方法,使得介面卡的靈活性更強。

物件介面卡優點:

可以把多個不同的適配者適配到同一個目標,也就是說,同一個介面卡可以把適配者類和它的子類都適配到目標介面。

2.介面卡模式的缺點

類介面卡缺點:

對於Java、C#等不支援多重繼承的語言,一次最多隻能適配一個適配者類,而且目標抽象類只能為抽象類,不能為具體類,其使用有一定的侷限性,不能將一個適配者類和它的子類都適配到目標介面。

物件介面卡缺點:

與類介面卡模式相比,要想置換適配者類的方法就不容易。如果一定要置換掉適配者類的一個或多個方法,就只好先做一個適配者類的子類,將適配者類的方法置換掉,然後再把適配者類的子類當做真正的適配者進行適配,實現過程較為複雜。

3.介面卡模式的適用場景

(1)系統需要使用現有的類,而這些類的介面不符合系統的需要。

(2)想要建立一個可以重複使用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。

相關推薦

大話設計模式介面卡模式

一.模式定義 物件結構型模式,類結構型設計模式。   介面卡模式:將一個介面轉換成客戶希望的另一個介面,介面卡模式使介面不相容的那些類可以一起工作。   Adapter Pattern: Convert the interface of a class into ano

設計模式1介面卡模式

啥叫介面卡 舉個栗子,我的是安卓手機,室友的是蘋果手機,我的安卓機子只能用我的安卓資料線來充電,而不能使用室友的蘋果資料線,但是我想借助某種工具(不知道有沒有這種東東...),讓我的安卓手機可以用室友的蘋果資料線來充電,可以幫我們達到這個目的的工具就是介面卡。通俗來說,介面

Java設計模式6介面卡模式

一、介面卡模式定義: 介面卡模式說的是,可以把一個類的介面變換成客戶端所期待的另一種介面,使得原本因介面不匹配而無法在一起工作的兩個類可以一起工作。 舉個例子:比方說我有一個檯燈,其插頭是標準的兩相的交流電插頭,即陽極、陰極。我旅遊到了一個地方想用自己的檯燈,但發現旅館裡

設計模式組合模式(Composite Pattern)

數據結構 log ide ase 統一 etc 方法 可能 模式 什麽是組合模式呢?簡單來說組合模式就是將對象合成樹形結構以表示“部分整體”的層次結構,組合模式使用戶對單個對象和組合對象使用具有一致性。 組合模式(Composite Pattern)有時

一天一個設計模式介面卡模式

概念:   介面卡模式是把一個類的介面變成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。 用途:   就像插頭轉換器,之前入了switch港版,插頭是英式的,還好附贈一個插頭轉換器,介面卡就相當於這個轉換器。 種類:   分為類的介面卡與物件的介面卡兩種

2018/12/8《大話設計模式》【介面卡模式

  週六上班,心痛的趕腳~   1:什麼是介面卡?   - 小李要去美國旅遊了,到了之後發現,美國插座電壓是 250V 的,自己的國產手機插上去肯定時不行的,這時小李有三種辦法解決這個問題     1:強烈抗議美國沒有 220V插座,要求美國必須在每個插座旁邊在安裝一個 220V

路一步步走>> 設計模式Composite-組合

package com.test.DPs.JieGou.Composite; /** * 結構型:Composite-組合 組合:作用面為 物件 * * 用途:將物件組合成樹形結構以表示“部分-整體”的層次結構。Composite使得使用者對單個物件和組合物件的使用具有一致性。 *

大話設計模式原型模式

一.模式定義 原型模式是物件建立型模式。 Prototype Pattern: Specify the kind of objects to create using a prototypical instance, and create new objects by c

設計模式(三)介面卡模式

介紹 意圖:將類的介面轉換為客戶期望的另一個介面。介面卡模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。是作為兩個不相容的介面之間的橋樑。 主要解決:主要解決在軟體系統中,常常要將一些"現存的物件"放到新的環境中,而新環境要求的介面是現物件不能滿足的。 何時使用: 1、系統需要使用現有的類,而此

設計模式介面卡模式

舉例:             在國外買了一個筆記本mac pro  但是充電器是110V的,在國內都是220V的,如何解決?             此時就想買個介面卡將220V轉110V,             但是不需要寫裡面的怎麼將220 轉110的,這都有現

JAVA設計模式(6)介面卡模式

介面卡模式作為兩個不相容介面之間的橋樑。 這種型別的設計模式屬於結構模式,因為該模式組合了兩個獨立介面。這種模式涉及一個單獨的類,它負責連線獨立或不相容介面的功能。 現實生活的例子- 讀卡器,其作用為儲存卡和膝上型電腦之間的介面卡。將儲存卡插入讀卡器並將讀卡器插入膝上型電腦介面,以便可以通過

設計模式第5篇介面卡模式

一.介面卡模式要解決的問題 介面卡模式屬於結構設計模式,我們把將兩個不相關的介面做一個適配以使二者進行互動的介面成為介面卡。比如充電器就是一個介面卡,正常電源是120V,手機電池輸入電壓是3V,電瓶車電池輸入電壓為20V,空調輸入電壓為120V,通過介面卡適配,可以將120V電源轉換為3V、20V、120V

javascript設計模式職責鏈模式

職責鏈的定義:使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係,將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個物件能處理它為止,傳遞鏈中的這些物件就叫節點。 需求背景: 一個電商網站,使用者交500定金且定金已付時,可享受500優惠券且不受貨物數量限制

Java設計模式()外觀設計模式

1. 應用場景 當我們訪問的子系統擁有複雜額結構,內部呼叫繁雜,初接觸者根本無從下手時,不凡由資深者為這個子系統設計一個外觀類來供訪問者使用,統一訪問路徑(集中到外觀類中),將繁雜的呼叫結合起來形成一個總呼叫寫到外觀類中,之後訪問者不用再繁雜的方法中尋找需要的方法進行呼叫,直接在外觀類中

Java設計模式(七)介面卡設計模式

1. 應用場景 在軟體開發中,也就是系統的資料和行為都正確,但介面不相符時,我們應該考慮用介面卡,目的是使控制範圍之外的一個原有物件與某個介面匹配。介面卡模式主要應用於希望複用一些現存的類,但是介面又與複用環境要求不一致的情況。比如在需要對早期程式碼複用一些功能等應用上很有實際價值。適用

設計模式php例項介面卡模式

介面卡模式將一個類的換成客戶端需要的另一個介面,使原本不相容的介面能一起工作。一個現實中的例子,假如屋裡牆上只有兩項插口,而風扇有三個插頭,這時需要再拿一個移動插線板,插線板接入牆壁插口的一段是兩項插頭,插線板另外一段能夠提供三項插口給風扇,這時候插線板起到了一個介面卡的作

設計模式介面卡模式(Adaptor Pattern)

/** * 介面卡模式將一個類的介面轉換成另一個類的介面,讓原本不相容的類之間可以合作。 * 注意:裝飾者模式用於給物件新增邏輯以改變原物件的功能,而介面卡模式用於轉換介面, * 以使原物件可以和新介面合作。 * @author Bright Lee */ public class

設計模式介面卡模式和裝飾器模式

package study.design.adapter.pass; import study.design.adapter.ResultMsg; /** * @comment 原介面 * @author bin * @date 2018年8月2日 */ pu

慕課網----大話PHP設計模式 四(介面卡模式,資料物件對映模式,觀察者模式

12.介面卡模式 可以將截然不同的函式介面封裝成統一的API 實際應用舉例,php的資料庫操作有mysql,mysqli,pdo 3種,可以用介面卡模式統一成一致。類似的場景還有cache介面卡,將memcache,redis,file,apc等不同的快取函

設計模式介面卡模式(Adapter)

 介面卡模式:將一個類的介面轉換成客戶希望的另外一個介面。介面卡模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。  介面卡模式有類介面卡模式和物件介面卡模式兩種不同的形式。 類介面卡  類介面卡模式把適配的類的API轉換成目標類的API