日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

《PHP設(shè)計模式介紹》第三章 工廠模式(5)_PHP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:《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”都是大寫測試,這樣可以測試代碼的通用性。

保險起見, 我們再對其進(jìn)行另外的測試,探究那些不合法的邊界情況。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 {
/**
* Return valid colors as color name => array(red, green, blue)
*
* Note the array is returned from function call
* because we want to have getColor able to be called statically
* so we can’t have instance variables to store the array
* @return array
*/
function colorList() {
return array(
‘black’ => array(0, 0, 0)
,’green’ => array(0, 128, 0)
// the rest of the colors ...
,’aqua’ => array(0, 255, 255)
);
}
/**
* Factory method to return a Color
* @param string $color_name the name of the desired color
* @return Color
*/
function &getColor($color_name) {
$color_name = strtolower($color_name);
if (array_key_exists($color_name,
$colors = CrayonBox::colorList())) {
$color = $colors[$color_name];
return new Color($color[0], $color[1], $color[2]);
}
trigger_error(“No color ‘$color_name’ available”);
// default to black
return new Color;
}

這顯然地是一個非常簡單的工廠, 它確實制造了單一化的對象(使用了顏色名字,而不是RGB數(shù)值) ,它展示了在新的對象被調(diào)用之前,是如何建立一個內(nèi)部對象的。

分享:《PHP設(shè)計模式介紹》第一章 編程慣用法
學(xué)習(xí)一門新的語言意味著要采用新的慣用法。這章將介紹或者可能重新強(qiáng)調(diào)一些慣用法。你會發(fā)現(xiàn)這些慣用法在你要在代碼中實現(xiàn)設(shè)計模式時候是非常有用的。 在這里總結(jié)的許多編程慣用法都是很值得

來源:模板無憂//所屬分類:PHP教程/更新時間:2008-08-22
相關(guān)PHP教程