介面卡模式

2021-10-14 13:21:08 字數 2418 閱讀 5497

介面卡(adapter )模式, 就是定義乙個第三方封裝類,將乙個類的介面轉換成客戶期望的另外乙個介面,使得原本由於介面不相容導致不能一起工作的類可以一起工作。 比如,現在有一根micro usb介面的資料線,而手機介面是type-c,兩者不能直接使用;通過乙個micro usb轉type-c的適配頭即可進行使用。

介面卡模式根據實現過程的不同,分為類模型介面卡和物件模型介面卡。

類模型介面卡:通過介面繼承實現,介面卡與適配者之間是繼承(實現)關係

物件模型介面卡:通實現繼承實現,介面卡與適配者之間是關聯關係;物件模型介面卡使用較多

介面繼承和實現繼承是物件導向領域的兩個重要的概念: 介面繼承,指的是通過繼承,子類獲得了父類的介面

實現繼承,指的是通過繼承,子類獲得了父類的實現

target(目標抽象類):目標抽象類定義客戶所需介面,可以是乙個抽象類或介面,也可以是具體類。

adapter(介面卡類):介面卡可以呼叫另乙個介面,作為乙個轉換器,對adaptee和target進行適配,介面卡類是介面卡模式的核心,在物件介面卡中,它通過繼承target並關聯乙個adaptee物件使二者產生聯絡

adaptee(適配者類):適配者即被適配的角色,它定義了乙個已經存在的介面,這個介面需要適配,適配者類一般是乙個具體類,包含了客戶希望使用的業務方法,在某些情況下可能沒有適配者類的源**。

根據物件介面卡模式結構圖,在物件介面卡中,客戶端需要呼叫request()方法,而適配者類adaptee沒有該方法,但是它所提供的specificrequest()方法卻是客戶端所需要的。為了使客戶端能夠使用適配者類,需要提供乙個包裝類adapter,即介面卡類。這個包裝類包裝了乙個適配者的例項,從而將客戶端與適配者銜接起來,在介面卡的request()方法中呼叫適配者specificrequest()方法。因為介面卡類與適配者類是關聯關係(也可稱之為委派關係),所以這種介面卡模式稱為物件介面卡模式。

//使用者目標類 paint

/* 目標介面類,客戶期望的介面 */

class

paint

;paint::

paint()

paint::

~paint()

void paint::

paint()

//宣告待適配類specialpaint

/* 需要適配的類 */

class

specialpaint

;specialpaint::

specialpaint()

specialpaint::

~specialpaint()

void specialpaint::

specialpaint()

//宣告介面卡類 adaptee

/* 類模型介面卡類,通過public繼承獲得介面繼承的效果,通過private繼承獲得實現繼承的效果 */

class

adaptee

:public paint,

private specialpaint

;adaptee::

adaptee()

adaptee::

~adaptee()

void adaptee::

paint()

intmain()

結果

優點:

解耦: 目標類與適配者解耦,通過引入乙個介面卡類來復用現有的適配者類,無須修改原有結構**。

類透明性:將具體的業務實現過程封裝在適配者類中,對於客戶端類來說是透明的。

復用性: 系統需要使用現有的類,而此類的介面不符合系統的需要。那麼通過介面卡模式可以將其他類封裝為系統需要的類,實現功能更好的復用;此外,同乙個適配者類可以在多個不同的系統中復用。

靈活性好和易於拓展:無需更改使用者介面和適配者**,易於拓展,符合「開閉原則「。

缺點:

可能導致軟體架構凌亂, 過多的使用介面卡,會讓軟體系統非常零亂,不易對軟體框架整體進行把控。

介面卡模式的優點決定了其適用的場景,反過來其缺點即是其不適用的場景。介面卡模式適用場景:

使用者需要復用已有類(模組),而該模組的介面與復用環境要求不一致,可以使用介面卡模式將該模組適配到使用者適合的介面

多個元件功能類似,但介面不統一且可能會經常切換,可使用介面卡模式,使得客戶可以以統一的介面使用這些元件。如:

使用第三方庫,將庫介面適配到自己的系統中,演算法、支付、加密等復用公司內部開發的成熟模組軟體架構更新(介面有變動),但需相容舊的軟體模組將日誌模組輸出到串列埠重定向輸出到u盤、網口等網路模組統一乙太網、wifi、蜂窩網、藍芽等介面

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

做個筆記 引用 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...