剛才的程序測(cè)試和現(xiàn)在的程序代碼都有一定程度的脆弱性。有沒有方法在長(zhǎng)久的使用中讓它們都更易于維護(hù)呢?當(dāng)然是有的!
回憶一下(第三章)Factory是如何提供一個(gè)更靈活的方法來創(chuàng)建類的實(shí)例的。為了更好地在將來檢驗(yàn)這些代碼,就從一個(gè)簡(jiǎn)單的Factory函數(shù)開始:
function &HwLibInstance() { return new HwLib; }
為了測(cè)試Factory,直接調(diào)用它而不創(chuàng)建它的實(shí)例:
class AdapterTestCase extends UnitTestCase { function TestAppWithFactory() { $lib =& HwLibInstance(); $this->assertWantedPattern( ‘/\w+ World!$/’ ,$lib->hello().$lib->world()); } }
有兩個(gè)方面需要注意:Factory創(chuàng)建了對(duì)象,而用于確認(rèn)的assertEqual()函數(shù)被修改為更靈活的assertWantedPattern()。你現(xiàn)在可以用一個(gè)正則表達(dá)式來捕獲你在庫中所要查找的“核心”,但可能會(huì)使這個(gè)測(cè)試本身變得脆弱。 接下來,升級(jí)HwLib庫。當(dāng)安裝了HwLib第二版,你就可以修改HwLibInstance()函數(shù)來適應(yīng)新的版本。
function &HwLibInstance($ver=false) { switch ($ver) { case ‘V2’: return new HwLib; default: return new HwLibV2ToV1Adapter(new HwLib); } }
現(xiàn)在重新運(yùn)行AdapterTestCase。測(cè)試通過!(綠色進(jìn)度條正常。)因?yàn)樵嫉某绦驔]有傳遞一個(gè)參數(shù),HwLibInstance會(huì)默認(rèn)返回封裝在HwLibV2toV1Adapter中的HwLib的一個(gè)實(shí)例。盡管如此,如果你編寫了新的代碼,你可以傳遞進(jìn)一個(gè)“V2”的參數(shù)讓這個(gè)函數(shù)自動(dòng)選擇HwLib的新版本而不用去調(diào)整它。 以后,如果你選擇升級(jí)HwLib的第三版,應(yīng)該將Factory做如下的調(diào)整:
function &HwLibInstance($ver=false) { switch ($ver) { case ‘V3’: return new HwLib; case ‘V2’: return new HwLibV3ToV2Adapter(new HwLib); default: return new HwLibV2ToV1Adapter( new HwLibV3ToV2Adapter(new HwLib)); } }
出處:phpchina
責(zé)任編輯:bluehearts
上一頁 php設(shè)計(jì)模式介紹之適配器模式 [2] 下一頁 php設(shè)計(jì)模式介紹之適配器模式 [4]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|