介面卡模式

2021-08-26 19:17:13 字數 2232 閱讀 3090

例項場景:我們以前的電腦上鍵盤的usb介面有的是圓形的,現在假如這個介面壞了,使用者想要更換乙個,但市場上基本上是方形usb介面,很無賴,配不上號,這時,店主告訴使用者不用擔心,買乙個轉換器就行,轉換器可以相容圓形和方形介面,問題就解決了。這個場景用到了我們所說的:介面卡模式

adapter模式的定義:把乙個類的介面變換成客戶端所期待的另外一種介面,使得原本由於介面不相容而不能再一起工作的那些類可以一起工作。

介面卡模式分類:1.類的介面卡模式(採用繼承實現)2.物件介面卡(採用物件組合方式實現)

模式的構成:以問題中例子為模型

目標抽象角色(target):定義客戶所期待要使用的介面,我們把鍵盤當做客戶端,客戶端所需要使用的usb介面是圓形的,在這裡就可以抽象出來乙個圓形介面的裝置(並不一定是鍵盤)。

源角色(adaptee):需要被適配的介面,在這裡指的是方形usb介面鍵盤。

介面卡角色(adapter):用來把源介面轉換成符合要求的目標介面的裝置,在這裡指的是我們的那個「轉換器」。

客戶端(client):這裡指的就是那個鍵盤。

**詳解:

package cn.com.pattern;

//目標抽象角色,使用者需要的是有圓形的usb介面

public inte***ce target

package cn.com.pattern;

//源角色,這裡是指提供方形的usb介面

public class adaptee

}

package cn.com.pattern;

//適配角色,這裡指老闆買給我們的那個轉換器

public class adapter extends adaptee implements target

}

package cn.com.pattern;

//客戶端,也就是問題中的鍵盤

public class client

}

最後將會輸出:

我提供方形的usb介面
達到了使用者需要的效果,讓只支援圓形usb介面的鍵盤使用方形usb介面

以上是類的介面卡模式,物件的介面卡模式的不同之處在於adapter角色封裝了adaptee角色,而不像類的介面卡模式所採取的繼承方式。其原理基本上是相似的。

public class adapter implements target

@override

//轉換器將圓形的介面轉換為方形介面

public void providecircleusb()

}

類的介面卡模式和物件介面卡模式的比較

1.類的適配模式用於單一源的適配,由於它的源的單一話,**實現不用寫選擇邏輯,很清晰;而物件的適配模式則可用於多源的適配,彌補了類適配模式的不足,使得原本用類適配模式需要寫很多介面卡的情況不復存在,弱點是,由於源的數目可以較多,所以具體的實現條件選擇分支比較多,不太清晰。

應用介面卡模式的場景:

1.系統需要使用現有的類,而現有類不符合當前系統的要求。如問題的提出。

2.系統要建立乙個可以重複使用的類,用來與彼此沒有太大關聯的類或者在將來要引用的類一起工作。在junit中有使用介面卡模式的情景。

預設的介面卡模式(default adapter):預設的介面卡模式為乙個介面提供預設的實現,子類可以從這個預設的實現類進行擴充套件,而不必而原有的介面進行擴充套件。相信大家在學習swing時「awt中事件的處理」有所接觸。他的好處在於客戶端不需要去實現與他無關的方法,只做他最關心的事。

這種模式的核心歸結如下:當你想實現乙個介面但又不想實現所有介面方法,只想去實現一部分方法時,就用中預設的介面卡模式,他的方法是在介面和具體實現類中新增乙個抽象類,而用抽象類去空實現目標介面的所有方法。而具體的實現類只需要覆蓋其需要完成的方法即可。

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

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