介面卡與裝飾器模式

2021-08-09 19:27:27 字數 1730 閱讀 4779

介面卡模式,就是把乙個類的介面變換成客戶端所能接受的另乙個介面,從而使兩個介面不匹配的兩個類能夠在一起工作。

通常用於乙個專案需要引用一些開源框架來一起工作的情況下,這些開源框架都有一些關於環境資訊的介面,需要從外部傳入,但外部介面不一定能匹配,在這種請款下,就需要介面卡模式來轉換介面。

介面卡模式的類結構如圖所示:

各角色說明如下:

介面卡的作用就是將乙個介面適配到另乙個介面,在i/o類庫有很多這樣的類子,如將字串資料轉成位元組資料儲存到檔案中,將位元組資料轉換成流資料等。下面以inputstreamreaderoutputstreamwriter類為例來介紹介面卡模式。

inputstreamreaderoutputstreamwriter分別繼承了reader和writer介面,但要建立它們的物件必須在建構函式傳入inputstream和outputstream例項。inputstreamreaderoutputstreamwriter的作用也是將inputstream和outputstream適配到reader和writer,inputstreamreader的類結構如圖

inputstreamreader實現了reader介面,並持有了inputstream的引用,這裡是通過streamdecoder類間接持有的,因為從byte到char要經過解碼。

很明顯介面卡就是inputstreamreader類,源角色就是inputstream代表的例項物件,目標介面就是reader類了。

i/o類庫中還有很多類似的用法,如stringreader將string類適配到reader介面,bytearrayinputstream介面卡將byte陣列適配到inputstream流處理介面。

裝飾器模式,顧名思義,就是將某個類重新裝扮下,使它在功能上更強大,但是作為原來的這個類,使用者不應該感受到裝飾前與裝飾後有什麼不同,否則就破壞了原有類的結構,所以裝飾器模式要做到對裝飾類的使用者透明。

圖中各角色描述如下:

以fileinputstream為例介紹裝飾器模式的使用。

如圖所示fileinputstream的類結構圖,inputstream類是以抽象元件存在的,而fileinputstream是具體元件,它實現了抽象元件的所有介面,fileinputstream無疑就是裝飾角色,它實現了inputstream類的所有介面,並持有inputstream的物件的例項引用;bufferedinputstream是具體的裝飾器實現者,它給inputstream附加了功能,這個裝飾器類的作用使得inputstream讀取的資料儲存在記憶體中,從而提高讀取的效能。與這個裝飾器類類似的功能還有linenumberinputstream類,它的作用是提高按行讀取資料的功能,它們都讓inputstream增強了功能或提公升了效能。

Adapter 裝飾器(介面卡)模式

實現這個目的有兩個方法,繼承or組合 1,使用繼承 類介面卡模式 2,使用組合 物件介面卡模式 角色 target 請求介面 adapter裝飾器類 adaptee 被適配類 已經存在的類 使用繼承,類介面卡模式 public inte ce target public class adaptee ...

介面卡模式和裝飾器模式

概念 將乙個類的介面轉換成客戶希望的另外乙個介面。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。特點 主要應用於希望復用一些現存的類,但是介面又與復用環境要求不一致的情況。分類 類介面卡模式 物件的介面卡模式 介面的介面卡模式 差別較大 實現思想 target 使用者期...

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

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