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
gof《設計模式》中提到了兩種adapter介面卡模式,一種叫物件介面卡模式,另一種叫類介面卡模式。物件介面卡模式就是我剛才舉的那個例子,那什麼是類介面卡模式呢?實際上類介面卡模式就是讓adapter的實現繼承adaptee。換句話說:類介面卡模式是以繼承的方式來實現,而物件介面卡模式是以組合的方式實現。以前我們說過:繼承增加了模組間的耦合程度,而組合降低了耦合程度,所以有人建議多使用物件介面卡模式,少用類介面卡模式。
以上**
通用類圖:
● target目標角色
該角色定義把其他類轉換為何種介面,也就是我們期望的介面。
● adaptee源角色
源角色是已經存在的、執行良好的類或物件,經過介面卡角色的包裝,它會成為乙個嶄新亮麗的角色。
● adapter介面卡角色
介面卡模式的核心角色,其他兩個角色都是已經存在的角色,而介面卡角色是需要新建立的,它的職責非常簡單:通過繼承或是類關聯的方式,把源角色轉換為目標角色。
通用**:
01
/**
02
* 目標角色
03
*
04
* @author administrator
05
*
06
*/
07
public
inte***ce
target
01
/**
02
* 目標角色實現類
03
*
04
* @author administrator
05
*
06
*/
07
public
class
concretetarget
implements
target
12
13
}
01
/**
02
* 源角色
03
*
04
* @author administrator
05
*
06
*/
07
public
class
adaptee
13
14
}
01
/**
02
* 介面卡角色
03
*
04
* @author administrator
05
*
06
*/
07
public
class
adapter
extends
adaptee
implements
target
12
13
}
01
/**
02
* 場景類
03
*
04
* @author administrator
05
*
06
*/
07
public
class
client
21
22
}
介面卡模式的優點:
● 介面卡模式可以讓兩個沒有任何關係的類在一起執行,只要介面卡這個角色能夠搞定他們就成。
● 增加了類的透明性
高層模組訪問的是target目標角色,具體的業務實現的是adaptee源角色。
● 提高了類的復用度
adaptee源角色在原有系統中還可以正常使用,而在目標角色中也可以充當新的角色。
● 靈活性非常好
如果不需要介面卡了,刪除介面卡就可以了,其他的**都不用修改。基本上就類似乙個靈活的構件,想用就用,不想就解除安裝。
介面卡模式的使用場景:
要修改乙個己經投產中的介面時,介面卡模式可能是最適合的模式了。
介面卡模式的注意事項:
介面卡模式最好在詳細設計階段不要考慮它,它不是為了解決還處在開發階段的問題,而是解決正在服役的專案問題,沒有乙個系統分析師會在做詳細設計的時候考慮使用介面卡模式,這個模式使用的主要場景是擴充套件應用中。
介面卡模式的擴充套件:
物件介面卡
物件介面卡和類介面卡的區別是:類介面卡是類間繼承,物件介面卡是物件的合成關係,也可以說是類的關聯關係,這是兩者的根本區別。
物件介面卡的類圖:
**
設計模式 七 介面卡模式
adapter pattern 將乙個類的介面轉換成客戶希望的另外乙個介面。adapter 模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。介面卡模式將乙個類的介面適配成使用者所期待的。乙個介面卡通常允許因為介面不相容而不能一起工作的類能夠在一起工作,做法是將類自己的介面包裹在乙個已存...
設計模式之介面卡模式(類介面卡模式)
介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...
java 設計模式之七 介面卡模式
這裡說兩種介面卡模式 1.類適配模式 在地球時代,所有坐騎都是只能跑,不能飛的,而現在很多坐騎在地球都可以飛了。假設,地球時代的坐騎只能跑,而現在的坐騎不僅能飛還能跑,我們可以用類適配模式來實現,要點是,介面卡繼承源類,實現目標介面 package adapter doc 源 public clas...