样本代码:
组件库包含哪些特性?
-
容易创建表单元素
-
将表单元素以html方式输出
-
在每个元素上实现简单的验证
本例中,我们创建一个包含姓,名,邮件地址,输入项的表单。所有的区域都是必须的,而且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样式后,表单渲染出来如下图所示:
为建立统一的API,我们创建一个基本的组件类(如果这是php5的例子,这或许会使用接口)。既然所有的组件(表单元素)都必须渲染一些输出,组建类可以仅仅只有一个paint()方法。
class Widget { function paint() { return $this->_asHtml(); } }
让我们以一个基本的text输入组件开始。它(组件)必须要包含输入区域的名字(name)而且输入内容可以以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.’”>’; } }
一个基本的测试可以验证HTML代码是否正确——作为参数传入给构造函数的名字,值(内容)是否传递到渲染后的输出中:
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.” 。因此,下一个增加到组件类的合理的特性就是一个描述。我们进入有能够统一增加(一些特性)能力的装饰器模式。
出处:phpchina
责任编辑:bluehearts
上一页 php设计模式介绍之装饰器模式 [1] 下一页 php设计模式介绍之装饰器模式 [3]
◎进入论坛网络编程版块参加讨论
|