《PHP設(shè)計模式介紹》第三章 工廠模式(5)_PHP教程
推薦:《PHP設(shè)計模式介紹》第二章 值對象模式在所有的最簡單的程序中,大多數(shù)對象都有一個標(biāo)識,一個重要的商業(yè)應(yīng)用對象,例如一個Customer或者一個SKU,有一個或者更多的屬性---id,name,email地址,這樣可以把它從同一個類的其他實例區(qū)分開
創(chuàng)建工廠來簡化對象的創(chuàng)建過程
讓我們?yōu)镃olor類增加一個工廠,使得建立新的實例更簡單。增加一個可以命名顏色的方法,這樣就可以不記顏色數(shù)值,只需要記住自己喜歡的顏色名字。
工廠對象或函數(shù)不一定都要被命名為 “工廠”。 當(dāng)你讀代碼時,工廠是顯而易見的。 相反的,它的名字最好取得有意義,這樣可以反映出它解決了什么問題。
在這個代碼例子中, 我要叫它CrayonBox顏色工廠。靜態(tài)的方法CrayonBox::getColor()引入命名顏色的字符串后,返回一個帶有相應(yīng)顏色屬性的Color類。
下面的例子就可以測試這一點:
function TestGetColor() {
$this->assertIsA($o =& CrayonBox::getColor(‘red’), ‘Color’);
$this->assertEqual(‘#FF0000’, $o->getRgb());
$this->assertIsA($o =& CrayonBox::getColor(‘LIME’), ‘Color’);
$this->assertEqual(‘#00FF00’, $o->getRgb());
}
通過這個測試,我們發(fā)現(xiàn)每個返回的對象都是一個實例化的Color類,getRgb() 方法也返回了正確的結(jié)果。第一種情況是以“red”都是小寫測試,第二種情況是以“LIME”都是大寫測試,這樣可以測試代碼的通用性。
保險起見, 我們再對其進行另外的測試,探究那些不合法的邊界情況。TestBadColor() 方法的作用是:用一個不存在的顏色名字引發(fā)一個包含這個顏色名字的php錯誤,并返回黑色。
function TestBadColor() {
$this->assertIsA($o =& CrayonBox::getColor(‘Lemon’), ‘Color’);
$this->assertErrorPattern(‘/lemon/i’);
// got black instead
$this->assertEqual(‘#000000’, $o->getRgb());
}
以下是一個可以滿足測試的CrayonBox類:
|
class CrayonBox { |
分享:《PHP設(shè)計模式介紹》第一章 編程慣用法學(xué)習(xí)一門新的語言意味著要采用新的慣用法。這章將介紹或者可能重新強調(diào)一些慣用法。你會發(fā)現(xiàn)這些慣用法在你要在代碼中實現(xiàn)設(shè)計模式時候是非常有用的。 在這里總結(jié)的許多編程慣用法都是很值得
- 相關(guān)鏈接:
- 教程說明:
PHP教程-《PHP設(shè)計模式介紹》第三章 工廠模式(5)
。