《PHP設(shè)計(jì)模式介紹》第三章 工廠模式(5)_PHP教程
推薦:《PHP設(shè)計(jì)模式介紹》第二章 值對象模式在所有的最簡單的程序中,大多數(shù)對象都有一個(gè)標(biāo)識,一個(gè)重要的商業(yè)應(yīng)用對象,例如一個(gè)Customer或者一個(gè)SKU,有一個(gè)或者更多的屬性---id,name,email地址,這樣可以把它從同一個(gè)類的其他實(shí)例區(qū)分開
創(chuàng)建工廠來簡化對象的創(chuàng)建過程
讓我們?yōu)镃olor類增加一個(gè)工廠,使得建立新的實(shí)例更簡單。增加一個(gè)可以命名顏色的方法,這樣就可以不記顏色數(shù)值,只需要記住自己喜歡的顏色名字。
工廠對象或函數(shù)不一定都要被命名為 “工廠”。 當(dāng)你讀代碼時(shí),工廠是顯而易見的。 相反的,它的名字最好取得有意義,這樣可以反映出它解決了什么問題。
在這個(gè)代碼例子中, 我要叫它CrayonBox顏色工廠。靜態(tài)的方法CrayonBox::getColor()引入命名顏色的字符串后,返回一個(gè)帶有相應(yīng)顏色屬性的Color類。
下面的例子就可以測試這一點(diǎn):
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());
}
通過這個(gè)測試,我們發(fā)現(xiàn)每個(gè)返回的對象都是一個(gè)實(shí)例化的Color類,getRgb() 方法也返回了正確的結(jié)果。第一種情況是以“red”都是小寫測試,第二種情況是以“LIME”都是大寫測試,這樣可以測試代碼的通用性。
保險(xiǎn)起見, 我們再對其進(jìn)行另外的測試,探究那些不合法的邊界情況。TestBadColor() 方法的作用是:用一個(gè)不存在的顏色名字引發(fā)一個(gè)包含這個(gè)顏色名字的php錯(cuò)誤,并返回黑色。
function TestBadColor() {
$this->assertIsA($o =& CrayonBox::getColor(‘Lemon’), ‘Color’);
$this->assertErrorPattern(‘/lemon/i’);
// got black instead
$this->assertEqual(‘#000000’, $o->getRgb());
}
以下是一個(gè)可以滿足測試的CrayonBox類:
class CrayonBox { |
分享:《PHP設(shè)計(jì)模式介紹》第一章 編程慣用法學(xué)習(xí)一門新的語言意味著要采用新的慣用法。這章將介紹或者可能重新強(qiáng)調(diào)一些慣用法。你會(huì)發(fā)現(xiàn)這些慣用法在你要在代碼中實(shí)現(xiàn)設(shè)計(jì)模式時(shí)候是非常有用的。 在這里總結(jié)的許多編程慣用法都是很值得
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁面代碼執(zhí)行時(shí)間
- PHP中獎(jiǎng)概率的抽獎(jiǎng)算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問控制的和運(yùn)算符優(yōu)先級介紹
- 關(guān)于PHP語言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國語言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
- 相關(guān)鏈接:
- 教程說明:
PHP教程-《PHP設(shè)計(jì)模式介紹》第三章 工廠模式(5)
。