總結(jié)
如例中代碼所示,你可以運(yùn)用適配器(Adapter)模式來避免因外部庫改變所帶來的不便——倘若向上兼容。作為某個(gè)庫的開發(fā)者,你應(yīng)該獨(dú)立編寫適配器,使你的用戶更簡便地使用新版本的庫,而不用去修改他們現(xiàn)有的全部代碼。
GoF書中提出的適配器(Adapter)模式更傾向于運(yùn)用繼承而不是組成。這在強(qiáng)類型語言中是有利的,因?yàn)檫m配器(Adapter)事實(shí)上是一個(gè)目標(biāo)類的子類,因而能更好地與類中方法相結(jié)合。
下面是HwLib適配器運(yùn)用繼承的范例:
class HwLibGofAdapter extends HwLib { // extending version 2.0 function hello() { return parent::greet(); } }
world()方法沒有在類中提到,因?yàn)檫\(yùn)用了繼承,它已經(jīng)是子類的一部分。
class AdapterTestCase extends UnitTestCase { function TestHwLibGofAdapter() { $lib =& new HwLibGofAdapter; $this->assertEqual( ‘Greetings and Salutations World!’ ,$lib->hello().$lib->world()); } }
為了更好的靈活性,我個(gè)人比較傾向于組成的方法(特別是在結(jié)合了依賴性倒置的情況下);盡管如此,繼承的方法提供兩種版本的接口,或許在你的實(shí)際運(yùn)用中反而是一個(gè)提高靈活性的關(guān)鍵。
注:依賴性倒置原理
依賴性倒置原理(首先在http://www.objectmentor.com/resources/articles/dip.pdf中由Robert C. Martin提出)是一個(gè)面向?qū)ο缶幊痰臏?zhǔn)則,它表明:高層次的模塊不應(yīng)該依賴于低層次的模塊,而應(yīng)依賴于抽取。一個(gè)簡單的與適配器(Adapter)模式相結(jié)合的依賴性倒置原理范例可以在以下地址中找到:http://www.phplondon.org/wiki/DependencyInversion
適配器模式的重點(diǎn)是改變一個(gè)單獨(dú)類的API。有一個(gè)與之相關(guān)的設(shè)計(jì)模式(本書中沒有涵蓋),稱作正面(Facade)模式。正面(Facade)的目的是給由許多對象構(gòu)成的整個(gè)子系統(tǒng),提供更為簡潔的接口——反過來就是封裝一個(gè)單獨(dú)類——可能是一個(gè)值得研究的模式,如果你正設(shè)法把你的代碼與第三方庫隔離開來的話。
本文鏈接:http://m.95time.cn/tech/program/2008/6117.asp
出處:phpchina
責(zé)任編輯:bluehearts
上一頁 php設(shè)計(jì)模式介紹之適配器模式 [3] 下一頁
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|