樣本代碼:
組件庫(kù)包含哪些特性?
-
容易創(chuàng)建表單元素
-
將表單元素以html方式輸出
-
在每個(gè)元素上實(shí)現(xiàn)簡(jiǎn)單的驗(yàn)證
本例中,我們創(chuàng)建一個(gè)包含姓,名,郵件地址,輸入項(xiàng)的表單。所有的區(qū)域都是必須的,而且E-mail必須看起來(lái)是有效的E—mail地址。用HTML語(yǔ)言表示,表單的代碼象下面所示:
<form action=”formpage.php” method=”post”> <b>First Name:</b> <input type=”text” name=”fname” value=””><br> <b>Last Name:</b> <input type=”text” name=”lname” value=””><br> <b>Email:</b> <input type=”text” name=”email” value=””><br> <input type=”submit” value=”Submit”> </form>
增加一些css樣式后,表單渲染出來(lái)如下圖所示:
為建立統(tǒng)一的API,我們創(chuàng)建一個(gè)基本的組件類(如果這是php5的例子,這或許會(huì)使用接口)。既然所有的組件(表單元素)都必須渲染一些輸出,組建類可以僅僅只有一個(gè)paint()方法。
class Widget { function paint() { return $this->_asHtml(); } }
讓我們以一個(gè)基本的text輸入組件開(kāi)始。它(組件)必須要包含輸入?yún)^(qū)域的名字(name)而且輸入內(nèi)容可以以HTML的方式渲染。
class TextInput extends Widget { var $name; var $value; function TextInput($name, $value=’’) { $this->name = $name; $this->value = $value; } function _asHtml() { return ‘<input type=”text” name=”’.$this->name.’” value=”’ .$this->value.’”>’; } }
一個(gè)基本的測(cè)試可以驗(yàn)證HTML代碼是否正確——作為參數(shù)傳入給構(gòu)造函數(shù)的名字,值(內(nèi)容)是否傳遞到渲染后的輸出中:
class WidgetTestCase extends UnitTestCase { function testTextInput() { $text =& new TextInput(‘foo’, ‘bar’); $output = $text->paint(); $this->assertWantedPattern( ‘~^<input type=”text”[^>]*>$~i’, $output); $this->assertWantedPattern(‘~name=”foo”~i’, $output); $this->assertWantedPattern(‘~value=”bar”~i’, $output); } }
TextInput組件工作正常,但是它的用戶接口非常糟糕,它缺少友好的描述,如“First Name” 或者 “Email Address.” 。因此,下一個(gè)增加到組件類的合理的特性就是一個(gè)描述。我們進(jìn)入有能夠統(tǒng)一增加(一些特性)能力的裝飾器模式。
出處:phpchina
責(zé)任編輯:bluehearts
上一頁(yè) php設(shè)計(jì)模式介紹之裝飾器模式 [1] 下一頁(yè) php設(shè)計(jì)模式介紹之裝飾器模式 [3]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|