介面卡模式原理及使用

2021-10-07 08:48:07 字數 2501 閱讀 7960

1 定義

介面卡模式(adapter pattern)是將乙個類的介面轉換成期待的型別,主要目的為相容性,乙個適配使得因介面不相容而不能在一起工作的類能在一起工作,做法是將類自己的介面包裹在乙個已存在的類中,它的別名為包裝器,屬於結構性模式。

介面卡模式有三種型別:類介面卡模式,物件介面卡模式,介面介面卡模式

2 類介面卡模式

介面卡模式中有三個角色,被適配者adapted,介面卡adapter,以及最終要轉換成的目標物件target。

客戶端使用介面:

public

inte***ce

target

被適配的物件:

public

class

adapted

}

介面卡:

//我們通過介面卡adapter將adapted適配與最終的介面target

public

class

adapter

extends

adapted

implements

target

}

測試**:

public

class

test

}

3.物件介面卡模式

與類適配模式不同的是物件適配模式中adapter不繼承被適配類,而是持有被適配類的例項,以解決相容性問題。

介面卡:

public

class

adapter

implements

target

@override

public

void

request()

}

4.介面介面卡模式

當不需要全部實現介面中的方法時,可以先定義乙個抽象類,為介面中的方法提供實現(空方法),之後的介面卡類繼承自抽象類,有選擇的實現類中的方法。

我們以充電器轉換電壓為例,要將家庭用電的220v轉換成手機鋰電池中的5v電壓。

定義交流220v

public

class

ac220

}

有多種電壓輸出的介面

public

inte***ce

voltageoutput

定義抽象類

public

abstract

class

voltageadapter

implements

voltageoutput

@override

public

intoutput5v()

@override

public

intoutput12v()

@override

public

intoutput24v()

@override

public

intoutput220v()

}

具體轉換成5v的介面卡

public

class

voltage5vadapter

extends

voltageadapter

@override

public

intoutput5v()

}

使用時:

voltageoutput output=

newvoltage5vadapter

(new

ac220()

);output.

output5v()

;

輸出結果:

輸出電壓為5v
5 總結

模式區別

類介面卡模式

adapter繼承了原類,它們為繼承關係

物件介面卡模式

adapter種持有物件例項,它們為持有關係

介面介面卡模式

抽象類實現介面,adapter繼承抽象類,實現了具體方法,它們為實現關係

適用場景:

1 系統需要使用現有的類,但這些類的介面不符合系統需要

2 建立乙個可以重複使用的類

優缺點:

優點:1 可以將兩個沒有關係的類在一塊執行,實現了具體類和被適配者的解耦

2 增加了**的復用性和透明性

3 增強**的可擴充套件性和靈活性。

缺點:1 對於類介面卡,不能將適配者類和它的子類同時適配到目標介面

2 對於物件介面卡,想要置換適配者模擬較困難。

介面卡模式(類介面卡 物件介面卡)

做個筆記 引用 public inte ce usb public inte ce psp public class usber implements usb 類介面卡 psp適用usb介面 public class usbadapter extends usber implements psp 物...

介面卡模式 預設介面卡,類介面卡,物件介面卡

模式思想 改變乙個類的對外介面 增加或減少 以滿足不同外部呼叫者的需求 角色成員 目標介面 target 客戶所期待的介面。目標可以是具體的或抽象的類,也可以是介面。需要適配的類 adaptee 需要適配的類或適配者類。介面卡 adapter 通過包裝乙個需要適配的物件,把原介面轉換成目標介面。適配...

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

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