設計模式1 介面卡模式

2021-08-28 06:06:57 字數 2225 閱讀 6958

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

而介面卡模式,就是借用介面卡思想的一種開發模式

可以分為三類

類介面卡

物件介面卡

介面介面卡

通過繼承來實現介面卡功能。

現在有兩個資料線(兩個介面)

inte***ce android

inte***ce iphone

我的安卓手機是只能用安卓資料線(實現介面)

class android implements android

}

現在我想找個介面卡,讓我的手機也能使用蘋果資料線。這個時候我們只需要在繼承android的基礎上實現 iphone介面就行了

class adapter extends android implements iphone

}

這時候我們的介面卡就完成了,既可以使用安卓手機充電(chargeandroid方法),也可以使用蘋果手機充電(chargeiphone方法)啦!

組合的思想來實現介面卡

同樣有兩根資料線(兩個介面)

inte***ce android

inte***ce iphone

安卓充安卓(介面實現類)

class android implements android

}

接下來就是區別於類介面卡的地方了,在類介面卡中,我們主要利用了繼承的方式來實現介面卡。現在我們不妨換種思路,因為我們已經有了乙個安卓的實現類,這個類有個chargeandroid方法,因此在我們的介面卡中可以增加乙個android的物件屬性,然後在建構函式中給該屬性初始化,這樣我們就可以通過這個物件來呼叫chargeandroid方法啦

class adapter implements iphone

@override

public void chargeiphone()

}

通過抽象類來實現介面卡, 和起前面提到的兩種有些區別。

設想乙個場景,現在有一種超級充電器介面,它有許多方法,可以給安卓,蘋果,電腦,***,ipad等等一系列產品充電,但是我只需要它能充安卓和iphone就行了,其他的方法我用不到。如果我們直接實現該介面的的話,那麼我們就要實現它的所有方法,即便我把用不到的方法直接寫個括號,也會讓我們的程式比較臃腫,而且呼叫起來也不方便。因此我們可以用乙個抽象類來實現這個介面,在抽象類中把所有方法置空,然後在用乙個子類來繼承該類,然後重寫我們需要使用的那幾個方法即可,這個抽象類就是我們的介面卡。

超級充電器介面

inte***ce wire
介面卡(抽象類)

abstract class adapter implements wire

public void chargeiphone(){}

public void chargecomputer(){}

public void charge***(){}

}

實現類

class charge extends adapter

public void chargeiphone()

}

類介面卡與物件介面卡的使用場景一致,僅僅是實現手段稍有區別,二者主要用於如下場景:

(1)想要使用乙個已經存在的類,但是它卻不符合現有的介面規範,導致無法直接去訪問,這時建立乙個介面卡就能間接去訪問這個類中的方法。

(2)我們有乙個類,想將其設計為可重用的類(可被多處訪問),我們可以建立介面卡來將這個類來適配其他沒有提供合適介面的類。

以上兩個場景其實就是從兩個角度來描述一類問題,那就是要訪問的方法不在合適的介面裡,乙個從介面出發(被訪問),乙個從訪問出發(主動訪問)。

介面介面卡使用場景:

(1)想要使用介面中的某個或某些方法,但是介面中有太多方法,我們要使用時必須實現介面並實現其中的所有方法,可以使用抽象類來實現介面,並不對方法進行實現(僅置空),然後我們再繼承這個抽象類來通過重寫想用的方法的方式來實現。這個抽象類就是介面卡。

參考資料 

介面卡設計模式1

面試 你懂什麼是分布式系統嗎?redis分布式鎖都不會?1 定義 是把乙個類的介面變換成客戶端所期待的另外一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。2 分類 a 類的介面卡模式 b 物件介面卡模式 3 下面詳細分析類的介面卡模式 a 涉及到的角色 目標 target 角...

設計模式 介面卡模式 類介面卡 物件介面卡

乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...

設計模式之介面卡模式(類介面卡模式)

介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...