你需要在歐洲使用美國制造的筆記本,但是插口和電壓的不1導致得你需要1個叫做適配器的東西,如圖:
通過適配器,我們就能夠?qū)⒈緛聿豢梢哉{(diào)和合作的兩種事物聯(lián)系在1起了。
那面向?qū)ο蟮倪m配器又是甚么呢?其實,OO適配器和真實世界的適配器扮演著相同的角色:將1個接口轉(zhuǎn)換為另外一個接口,以符適用戶的期望。
可以簡單地用下圖理解適配器:
現(xiàn)在我們來1個有趣的例子開始進入代碼講授:
首先鴨子的接口是這樣的:
綠頭鴨的類:
而火雞的接口是這樣的的:
有這樣1種火雞:
有1只火雞想冒充鴨子,但是它不會quack,只會gobble,咋辦呢?
寫個適配器類吧,正如將美國插頭冒充為歐洲的那樣~~
適配器要實現(xiàn)Duck接口,就像插頭適配器本身也是1個插頭,重點在于,在調(diào)用本來屬于鴨子的方法的時候?qū)嵸|(zhì)上調(diào)用了火雞的方法!
客戶端測試1下:
testDuck方法只認鴨子,但是它沒想到1只冒充鴨子的火雞混入其中,也裝腔作勢地像鴨子1樣叫和飛。
讓我們結(jié)合兩個例子來解析適配器模式。testDuck方法類似歐洲的插座,它只認歐洲的插頭,適配器固然就是我們的火雞鴨子適配器類了,美國插頭就像火雞,通過適配器,將美國插頭假裝成歐洲插頭。
看看官方的定義:
適配器模式將1個類的接口,轉(zhuǎn)換成客戶期望的另外一個類的接口。適配器讓本來接口不兼容的類可以合作無間。
看看類圖:
客戶只看到目標接口,正如testDuck方法只看到Duck,而歐洲插座只看到歐洲的插頭1樣,適配器就是把被適配者轉(zhuǎn)換為目標接口的樣子。
適配器模式充滿著良好的OO設(shè)計原則:使用對象組合,已修改的接口包裝被適配者。另外的優(yōu)點是被適配者的子類,都可以搭配適配器使用。
適配器模式在實踐中的使用處合:想使用1個已存在的類,但是如果它的方法和你的要求不同時,而你又不想更改客戶真?zhèn)€代碼時,可以斟酌使用適配器。比如:公司在設(shè)計1個系統(tǒng)斟酌使用第3方開發(fā)組件,而這個組件的接口和我們自己的系統(tǒng)接口不同,而我們也沒必要為了逢迎它而改變自己的接口,就能夠斟酌使用適配器模式來解決問題。