樣本代碼
規(guī)范模式的核心是一個(gè)帶有IsSatisfiedBy()方法的對(duì)象,IsSatisfiedBy()方法接收一個(gè)變量來評(píng)估并且返回一個(gè)基于規(guī)范標(biāo)準(zhǔn)的布爾值。
“目的地是足夠溫暖的”的標(biāo)準(zhǔn)可能就是:
class TripRequiredTemperatureSpecification { public function isSatisfiedBy($trip) { $trip_temp = $trip->destination->getAvgTempByMonth( date(‘m’, $trip->date)); return ($trip_temp >= $trip->traveler->min_temp); } }
下面是一些測(cè)試,用來檢驗(yàn)這個(gè)規(guī)范是如何工作的。
一個(gè)最初的個(gè)體測(cè)試事例提供了一些目的地來一起工作:
class TripSpecificationTestCase extends UnitTestCase { protected $destinations = array(); function setup() { $this->destinations = array( ‘Toronto’ => new Destination( array(24, 25, 33, 43, 54, 63, 69, 69, 61, 50, 41, 29)) ,’Cancun’ => new Destination( array(74, 75, 78, 80, 82, 84, 84, 84, 83, 81, 78, 76)) ); } }
(構(gòu)造這些目的地(Destination)需要在實(shí)例化的時(shí)候輸入一個(gè)包含每月平均溫度的數(shù)組。做為一個(gè)美國(guó)的作者,在這些例子中我選擇了華氏溫度。對(duì)應(yīng)的,Vicki期望的華氏溫度70度等價(jià)于攝氏溫度21度)
下一個(gè)測(cè)試構(gòu)建了一個(gè)旅行者(Traveler),并且設(shè)置了它的首選最低溫度和旅行日期同時(shí)也選擇了一個(gè)目的地。這最初的組合“最低溫度70度(華氏溫度),目的地多倫多(Toronto),日期二月中旬”會(huì)和期望的一樣,是不能通過的。
class TripSpecificationTestCase extends UnitTestCase { // ... function TestTripTooCold() { $vicki = new Traveler; $vicki->min_temp = 70; $toronto = $this->destinations[‘Toronto’]; $trip = new Trip; $trip->traveler = $vicki; $trip->destination = $toronto; $trip->date = mktime(0,0,0,2,11,2005); $warm_enough_check = new TripRequiredTemperatureSpecification; $this->assertFalse($warm_enough_check->isSatisfiedBy($trip)); } }
但是,接下來的這個(gè)組合“70度,二月中旬,Cancun ”就會(huì)通過,和我們期望的一樣。
class TripSpecificationTestCase extends UnitTestCase { // ... function TestTripWarmEnough() { $vicki = new Traveler; $vicki->min_temp = 70; $cancun = $this->destinations[‘Cancun’]; $trip = new Trip; $trip->traveler = $vicki; $trip->destination = $cancun; $trip->date = mktime(0,0,0,2,11,2005); $warm_enough_check = new TripRequiredTemperatureSpecification; $this->assertTrue($warm_enough_check->isSatisfiedBy($trip)); } }
出處:
責(zé)任編輯:bluehearts
上一頁 php設(shè)計(jì)模式介紹之規(guī)范模式 [1] 下一頁 php設(shè)計(jì)模式介紹之規(guī)范模式 [3]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|