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

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

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

推薦:《PHP設(shè)計(jì)模式介紹》第二章 值對(duì)象模式
在所有的最簡單的程序中,大多數(shù)對(duì)象都有一個(gè)標(biāo)識(shí),一個(gè)重要的商業(yè)應(yīng)用對(duì)象,例如一個(gè)Customer或者一個(gè)SKU,有一個(gè)或者更多的屬性---id,name,email地址,這樣可以把它從同一個(gè)類的其他實(shí)例區(qū)分開

例子:增加一些顏色

讓我們更深入工廠模式吧。繼續(xù)如前,先建立一個(gè)能為本章節(jié)的其它部分持續(xù)舉例說明的簡單類。 這是一個(gè)輸出十六進(jìn)制的HTML RGB Color類,包括了R, G, 和 B三個(gè)屬性(在構(gòu)造對(duì)象的時(shí)候引入)和 getRgb()方法,getRgb()的作用是返回一個(gè)十六進(jìn)制顏色的字符串。

和以前一樣,我們按照測試驅(qū)動(dòng)開發(fā)(TDD)的方法:寫一個(gè)測試,再寫一段代碼滿足該測試,如果需要,反復(fù)下去。

下面是一個(gè)非常簡單的起始測試:

function TestInstantiate() {
$this->assertIsA($color = new Color, ‘Color’);
$this->assertTrue(method_exists($color, ‘getRgb’));
}

為了滿足這個(gè)測試,你可以設(shè)計(jì)這樣一個(gè)類。測試看起來有點(diǎn)像偽代碼:

class Color {
function getRgb() {}
}

( 這個(gè)Color類也許看起來像處于娃娃階段, 但是 TDD是一個(gè)反復(fù)的過程。 代碼非常少,當(dāng)需要的時(shí)候:你開始有了新的想法或者想精確的執(zhí)行代碼時(shí),可以增加的。)

接下來, 當(dāng)顏色對(duì)象被建立時(shí),getRgb() 方法應(yīng)該返回以紅色,綠色,和藍(lán)色的十六進(jìn)制字符串。 用一個(gè)測試說明一下:

function TestGetRgbWhite() {
$white =& new Color(255,255,255);
$this->assertEqual(‘#FFFFFF’, $white->getRgb());
}

每個(gè) TDD, 你寫最簡單的可行的代碼來滿足測試, 并不需要滿足人的審美觀或者代碼的正確執(zhí)行。

下面是最簡單的,能夠通過測試的代碼:

class Color {
function getRgb() { return ‘#FFFFFF’; }
}

這個(gè)Color類不是令人十分滿意, 但是它確實(shí)表現(xiàn)了逐漸增加的過程。

下一步,讓我們增加一個(gè)額外的測試使這個(gè)Color類的的確確地執(zhí)行并返回正確的信息:

這個(gè)Color類必須改變什么呢? 首先必須把紅色,綠色,和藍(lán)色的值儲(chǔ)存在三個(gè)變量里,然后在調(diào)用一個(gè)方法把十進(jìn)制數(shù)轉(zhuǎn)化為十六進(jìn)制數(shù)。按照這個(gè)要求執(zhí)行的代碼可以寫作:

class Color {
var $r=0;
var $g=0;
var $b=0;
function Color($red=0, $green=0, $blue=0)
{
$this->r =$red;
$this->g = $green;
$this->b = $blue;
}
function getRgb() {
return sprintf(‘#XXX’, $this->r, $this->g, $this->b);
}
}

這個(gè)構(gòu)造非常簡單: 先收集紅色,綠色,和藍(lán)色的數(shù)值,然后儲(chǔ)存在變量中, getRgb() 方法使用 sprintf() 函數(shù)將十進(jìn)制數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù)。

為了對(duì)代碼充滿更多的信心, 你可以用較多的數(shù)值來測試它。 這一個(gè)測試可以用以下代碼實(shí)現(xiàn):

function TestGetRgbRandom() {
$color =& new Color(rand(0,255), rand(0,255), rand(0,255));
$this->assertWantedPattern(
‘/^#[0-9A-F]{6}$/’,
$color->getRgb());
$color2 =& new Color($t = rand(0,255), $t, $t);
$this->assertWantedPattern(
‘/^#([0-9A-F]{2})\1\1$/’,
$color2->getRgb());
}

注:assertWantedPattern
assertWantedPattern() 作用是:使它的第二個(gè)叁數(shù)匹配第一個(gè)參數(shù),第一個(gè)參數(shù)是正則表達(dá)式。如果匹配,這個(gè)測試就通過; 否則不通過。
由于assertWantedPattern()具有進(jìn)行正確的正則表達(dá)式匹配的功能,所以常被用作測試。

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

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