se {
function testBuild() {
$this->assertIsA($form = FormHandler::build(new Post), ‘Array’);
$this->assertEqual(3, count($form));
$this->assertIsA($form[1], ‘Labeled’);
$this->assertWantedPattern(‘~email~i’, $form [2]->paint());
}
}
实现FormHandler 的代码:
class FormHandler {
function build() {
return array(
new Labeled(‘First Name’, new TextInput(‘fname’))
,new Labeled(‘Last Name’, new TextInput(‘lname’))
,new Labeled(‘Email’, new TextInput (‘email’))
);
}
}
现在,这段代码并不能工作—没有通过
php设计模式介绍之装饰器模式 - 凌众科技
快速业务通道
++++选择通道++++
国内服务器 厦门电信服务器 汕头电信服务器 温州电信服务器 厦门网通服务器 汕头双线服务器 美国服务器 欧洲服务器 美国KT机房服务器 美国FDC机房服务器 香港服务器 新加坡服务器 韩国服务器 台湾服务器 英国服务器 德国服务器 新加坡Qala机房服务器 香港机房服务器 法国服务器 江苏电信服务器 美国TB机房服务器 日本服务器 河北网通服务器 厦门软二服务器 台湾机房服务器 韩国机房服务器 美国ST机房服务器 江西电信服务器 其他机房服务器 菲律宾服务器 日本机房服务器 菲律宾机房服务器
国内大带宽
php设计模式介绍之装饰器模式
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-05-22
content
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn
为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
post提交的数据。因为这段代码必须要使用一个MockObject对象 (参见第6章)测试,现在我们 可以将
php设计模式介绍之装饰器模式 - 凌众科技
快速业务通道
++++选择通道++++
国内服务器 厦门电信服务器 汕头电信服务器 温州电信服务器 厦门网通服务器 汕头双线服务器 美国服务器 欧洲服务器 美国KT机房服务器 美国FDC机房服务器 香港服务器 新加坡服务器 韩国服务器 台湾服务器 英国服务器 德国服务器 新加坡Qala机房服务器 香港机房服务器 法国服务器 江苏电信服务器 美国TB机房服务器 日本服务器 河北网通服务器 厦门软二服务器 台湾机房服务器 韩国机房服务器 美国ST机房服务器 江西电信服务器 其他机房服务器 菲律宾服务器 日本机房服务器 菲律宾机房服务器
国内大带宽
php设计模式介绍之装饰器模式
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-05-22
content
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn
为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
post数据包装在一个类似哈希的对象中—与ReGIStry(参见第五章)类似,或者模仿WACT 的DataSource从Specification pattern
class Post {
var $store = array();
function get($key) {
if (array_key_exists($key, $this->store))
return $this ->store[$key];
The Decorator Pattern 209
}
function set($key, $val) {
$this->store[$key] = $val;
}
}
想更方便的话,你可以使用Factory 模式或者自动填充的方法来从
php设计模式介绍之装饰器模式 - 凌众科技
快速业务通道
++++选择通道++++
国内服务器 厦门电信服务器 汕头电信服务器 温州电信服务器 厦门网通服务器 汕头双线服务器 美国服务器 欧洲服务器 美国KT机房服务器 美国FDC机房服务器 香港服务器 新加坡服务器 韩国服务器 台湾服务器 英国服务器 德国服务器 新加坡Qala机房服务器 香港机房服务器 法国服务器 江苏电信服务器 美国TB机房服务器 日本服务器 河北网通服务器 厦门软二服务器 台湾机房服务器 韩国机房服务器 美国ST机房服务器 江西电信服务器 其他机房服务器 菲律宾服务器 日本机房服务器 菲律宾机房服务器
国内大带宽
php设计模式介绍之装饰器模式
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-05-22
content
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn
为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
POST里面提取关键字。
class Post {
// ...
function &autoFill() {
$ret =& new Post;
foreach(
php设计模式介绍之装饰器模式 - 凌众科技
快速业务通道
++++选择通道++++
国内服务器 厦门电信服务器 汕头电信服务器 温州电信服务器 厦门网通服务器 汕头双线服务器 美国服务器 欧洲服务器 美国KT机房服务器 美国FDC机房服务器 香港服务器 新加坡服务器 韩国服务器 台湾服务器 英国服务器 德国服务器 新加坡Qala机房服务器 香港机房服务器 法国服务器 江苏电信服务器 美国TB机房服务器 日本服务器 河北网通服务器 厦门软二服务器 台湾机房服务器 韩国机房服务器 美国ST机房服务器 江西电信服务器 其他机房服务器 菲律宾服务器 日本机房服务器 菲律宾机房服务器
国内大带宽
php设计模式介绍之装饰器模式
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-05-22
content
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn
为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
POST as $key => $value) {
$ret->set($key, $value);
}
return $ret;
}
}
使用这个Post类,你可以编辑你的FormHandler::build() 方法,默认使用已经存在的
php设计模式介绍之装饰器模式 - 凌众科技
快速业务通道
++++选择通道++++
国内服务器 厦门电信服务器 汕头电信服务器 温州电信服务器 厦门网通服务器 汕头双线服务器 美国服务器 欧洲服务器 美国KT机房服务器 美国FDC机房服务器 香港服务器 新加坡服务器 韩国服务器 台湾服务器 英国服务器 德国服务器 新加坡Qala机房服务器 香港机房服务器 法国服务器 江苏电信服务器 美国TB机房服务器 日本服务器 河北网通服务器 厦门软二服务器 台湾机房服务器 韩国机房服务器 美国ST机房服务器 江西电信服务器 其他机房服务器 菲律宾服务器 日本机房服务器 菲律宾机房服务器
国内大带宽
php设计模式介绍之装饰器模式
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-05-22
content
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn
为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
post数据:
class FormHandler {
function build(&$post) {
return array(
new Labeled(‘First Name’
, new TextInput(‘fname’, $post->get(‘fname’)))
,new Labeled(‘Last Name’
, new TextInput(‘lname’, $post->get(‘lname’)))
,new Labeled (‘Email’
, new TextInput(‘email’, $post->get (‘email’)))
);
}
}
现在你可以创建一个PHP脚本使用 FormHandler类来产生HTML表单:
<form action=”formpage.php” method=”post”>
<?php
210 The Decorator Pattern
$post =& Post::autoFill();
$form = FormHandler::build($post);
foreach($form as $widget) {
echo $widget->paint(), “<br>\n”;
}
?>
<input type=”submit” value=”Submit”>
</form>
现在,你已经拥有了一个提交给它自身并且能保持posted数据的表单处 理(form handler) 类。
现在。我们继续为表单添加一些验证机制。方法是编辑另一个组件装 饰器类来表达一个“invalid”状态并扩展FormHandler类增加一个validate()方法以处理 组件示例数组。如果组件非法(“invalid”),我们通过一个“invalid”类将 它包装在<span>元素中。这里是一个证明这个目标的测试
class WidgetTestCase extends UnitTestCase {
// ...
function testInvalid() {
$text =& new Invalid(
new TextInput(‘email’));
$output = $text- >paint();
$this->assertWantedPattern(
‘~^<span class=”invalid”><input[^>]+></span>$~i’, $output);
}
}
这里是Invalid WidgetDecorator子类:
//代码Here’s the Invalid WidgetDecorator subclass:
class Inva