Adapter介面卡模式

2021-05-10 23:26:06 字數 2466 閱讀 4954

adapter介面卡模式是一種結構型模式,主要應對:由於應用環境的變化,常常需要將「一些現存的物件」放在新的環境中應用,但是,新環境要求的介面是現存物件所不滿足的。

《設計模式》中說道:將乙個類的介面轉換成客戶希望的另乙個介面。adapter模式使得原本由於介面不相容而不能一起工作的類可以一起工作。

在實際的生活中有很多例子,如:我們常使用的行動硬碟,無論是筆記本硬碟還是台式電腦硬碟,對於資料的傳輸都不使用usb的資料線,外接的硬碟盒就是將原來的硬碟資料傳輸方式適合usb資料線。(哎,我那個硬碟盒買的時候還190元,其實一點都不值,整個乙個盒,就那個轉接晶元比較值錢,我說50,人家不賣)。

我再接著說介面卡模式,先舉個簡單的**例子,我現在要做乙個佇列的類,實現先進先出的功能。利用arraylist物件。

首先,我們先定義一些佇列的介面,介面中定義佇列的方法,**如下:

inte***ce iqueue

下面我們再來利用arraylist物件實現乙個佇列:

class queue:iqueue

public void push(object item)

public object putout()

public object showlastitem()

public object showfirstitem()

}實現有了,現在用客戶端程式呼叫來看一下結果:

class class1

}輸出結果:

firstitem:1

lastitem:5

output:1

firstitem:2

lastitem:6

介面卡模式實現有兩種型別:物件介面卡、類介面卡。上面的**是物件介面卡方式。也就是介面卡(queue)中是使用被適配(arraylist)的物件實現。它的結構如下:

gof《設計模式》中提到了兩種adapter介面卡模式,一種叫物件介面卡模式,另一種叫類介面卡模式。物件介面卡模式的結構如上圖,也就是我剛才舉的那個例子,那什麼是類介面卡模式呢?實際上類介面卡模式就是讓adapter的實現繼承adaptee。換句話說:類介面卡模式是以繼承的方式來實現,而物件介面卡模式是以組合的方式實現。以前我們說過:繼承增加了模組間的耦合程度,而組合降低了耦合程度,所以有人建議多使用物件介面卡模式,少用類介面卡模式。不過既然提到,我也具體談談類介面卡模式。它的結構如下圖:

我們依然用上面的那個佇列的例子,首先我們要實現乙個adapter的類,這個類要繼承適配物件adaptee類,也就是例子中的arraylist,還有佇列介面,就是我們定義的iqueue,**如下:

class classadapter:arraylist,iqueue

public void push(object item)

public object putout()

public object showlastitem()

public object showfirstitem()

}然後我們再修改一下客戶**:

static void main(string args)

輸出結果為:

firstitem:1

lastitem:5

output:1

firstitem:2

lastitem:6

要說明一點:從實現的**看:classadapter類同時繼承了arraylist,iqueue,這樣違反了設計原則中的單一職責原則(srp)——乙個類應該僅有乙個引起他變化的原因。

接下來,我們在看看adapter模式的幾個要點:

1、              adapter模式主要應用於「希望服用一些現存的類,但是介面又與復用環境要求不一致的情況」,在遺留**復用、類庫遷移等方面非常有用。

2、              gof23定義了兩種adapter模式的實現結構:物件介面卡和類介面卡。但類介面卡採用「多繼承」的實現方式,帶來了不良的高耦合,所以一般不推薦使用。物件介面卡採用「物件組合」的方式,更符合松耦合精神。

3、              adapter模式本身要求我們盡可能的使用「面向介面的程式設計」風格,這樣才能在後期很方便的適配

adapter模式的實現方法有很多,說到這我在舉乙個例子,我現在有這樣乙個場景。我有一輛bora車子和bmw的engine和wheel,我現在想改裝這輛bora使其擁有bmw的engine和wheel,我如何做呢?

首先,我們要擁有一些bmw的零部件,**如下:

class bmwpartclass

public void bmwwheel()

}然後,再來實現對這些零部件的適配,**如下:

inte***ce itarget

class adapter:itarget

}對於我的bora的實現:

class myboraclass

}最後是客戶端**:

static void main(string args)

輸出結果是:

it is a bmwengine

it is a bmwwheel

介面卡模式 Adapter

一句話 什麼是adapter adapter 就是乙個轉換器,比如乙個電源插頭可以讓乙個兩插頭的電器使用牆壁上的三插頭電源。這次的介紹將不寫 雖然設計模式是為了 而生,但我認為這是一種看世界的方法,不僅僅是一種 的設計方式,所以這次的介面卡模式因為比較簡單和容易理解就不再寫 解釋,但介面卡的思想能用...

Adapter 介面卡模式

1.概念 介面卡模式 adapter pattern gof95 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。2.兩種形式 a.類的介面卡模式 b.物件的介面卡模式 3.模擬問題 現在假設我們的程式已經設計了介面request介面,但是...

介面卡模式(adapter)

介面卡模式 adapter 將乙個類的介面轉換為客戶希望的另外乙個介面,adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作.系統的資料和行為都正確,但介面不符時,我們應該考慮使用介面卡,目的是使控制範圍之外的乙個原有物件與某個介面匹配.介面卡模式主要應用於希望復用一些現存的類...