《PHP設(shè)計模式介紹》第十二章 裝飾器模式(2)_PHP教程
推薦:《PHP設(shè)計模式介紹》第十一章 代理模式因為某個對象消耗太多資源,而且你的代碼并不是每個邏輯路徑都需要此對象, 你曾有過延遲創(chuàng)建對象的想法嗎 ( if和else就是不同的兩條邏輯路徑) ? 你有想過限制訪問某個對象,也就是說,提供一組方法
樣本代碼:
組件庫包含哪些特性?
1. 容易創(chuàng)建表單元素
2. 將表單元素以html方式輸出
3. 在每個元素上實現(xiàn)簡單的驗證
本例中,我們創(chuàng)建一個包含姓,名,郵件地址,輸入項的表單。所有的區(qū)域都是必須的,而且E-mail必須看起來是有效的E—mail地址。用HTML語言表示,表單的代碼象下面所示:
| <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樣式后,表單渲染出來如下圖所示:
為建立統(tǒng)一的API,我們創(chuàng)建一個基本的組件類(如果這是php5的例子,這或許會使用接口)。既然所有的組件(表單元素)都必須渲染一些輸出,組建類可以僅僅只有一個paint方法。
| class Widget { function paint() { return $this->_asHtml(); } } |
讓我們以一個基本的text輸入組件開始。它(組件)必須要包含輸入?yún)^(qū)域的名字(name)而且輸入內(nèi)容可以以HTML的方式渲染。
|
class TextInput extends Widget { |
一個基本的測試可以驗證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.” 。因此,下一個增加到組件類的合理的特性就是一個描述。我們進(jìn)入有能夠統(tǒng)一增加(一些特性)能力的裝飾器模式。
分享:《PHP設(shè)計模式介紹》第十章 規(guī)范模式在一個應(yīng)用軟件的成型過程中,一些意想不到的商業(yè)邏輯到處出現(xiàn)。比如,基于價格的考慮,這個任務(wù)必須減少項目;而那個任務(wù)也因為銷售稅而必須選擇合適的比率;而其它的任務(wù)也必須因為其他的特別
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁面代碼執(zhí)行時間
- PHP中獎概率的抽獎算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問控制的和運(yùn)算符優(yōu)先級介紹
- 關(guān)于PHP語言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國語言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
- 相關(guān)鏈接:
- 教程說明:
PHP教程-《PHP設(shè)計模式介紹》第十二章 裝飾器模式(2)
。