快速业务通道

php设计模式介绍之装饰器模式

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
lid extends WidgetDecorator {
function paint() {
return ‘<span class=”invalid”>’.$this->widget->paint ().’</span>’;
}
}

装饰器的一个优点是你可以将他们串 在一起(使用)。Invalid装饰器仅仅知道:它正在包装一个组件:它不必关心组件是否是一个 TextInput, Select,或者是一个有标签的被装饰版本的组件 。

这导致了下一个合理的测试用例 :

class WidgetTestCase extends UnitTestCase {
// ...
function testInvalidLabeled() {
$text =& new Invalid(
new Labeled(
‘Email’
,new TextInput(‘email’)));
$output = $text- >paint();
$this->assertWantedPattern(‘~<b>Email:</b> <input~i’, $output);
$this->assertWantedPattern(
‘~^<span class=”invalid”>.*</span>$~i’, $output);
}
}

有了Invalid装饰器,我们来处理FormHandler::validate() 方法:

class FormHandlerTestCase extends UnitTestCase {
// ...
function testValidateMissingName() {
$post =& new Post;
$post->set (‘fname’, ‘Jason’);
$post->set(‘email’, ‘jsweat_php@yahoo.com’);
$form = FormHandler::build($post);
$this- >assertFalse(FormHandler::validate($form, $post));
$this- >assertNoUnwantedPattern(‘/invalid/i’, $form[0]->paint());
$this- >assertWantedPattern(‘/invalid/i’, $form[1]->paint());
$this- >assertNoUnwantedPattern(‘/invalid/i’, $form[2]->paint());
}
}

这个测试捕获(包含)了所有的基本方面:建立一个Post实例的存根,使用它建立一个 组件集合,然后将集合传送给validate方法。

class FormHandler {
function validate(&$form, &$post) {
// first name required
if (!strlen($post- >get(‘fname’))) {
$form[0] =& new Invalid($form[0]);
}
212 The Decorator Pattern
// last name required
if (!strlen($post->get (‘lname’))) {
$form[1] =& new Invalid($form[1]);
}
}
}

不协调的代码

当我看这段代码时,我发现了两个不协调之处:通过数字索引访问 表单元素,需要传递 php设计模式介绍之装饰器模式 - 凌众科技

快速业务通道

php设计模式介绍之装饰器模式

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
content

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号

post数组。给validation方法。在以后的重构中,最好是创建一个组件集合用一 个以表单元素名字索引的关联数组表示或者用一个ReGIStry模式作为更合理的一步。你也可以给类 Widget增加一个方法返回它的

当前数值,取消需要传递 php设计模式介绍之装饰器模式 - 凌众科技

快速业务通道

php设计模式介绍之装饰器模式

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
content

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号

Post实例给Widget集合的构造函数。所 有这些都超出了这个例子目的的范围。

为了验证目的,我们继续增加一个简单的 正则方法 (regex)来验证email地址:

class FormHandlerTestCase extends UnitTestCase {
// ...
function testValidateBadEmail() {
$post =& new Post;
$post- >set(‘fname’, ‘Jason’);
$post->set(‘lname’, ‘Sweat’);
$post->set(‘email’, ‘jsweat_PHP AT yahoo DOT com’);
$form = FormHandler::build($post);
$this->assertFalse (FormHandler::validate($form, $post));
$this->assertNoUnwantedPattern (‘/invalid/i’, $form[0]->paint());
$this->assertNoUnwantedPattern (‘/invalid/i’, $form[1]->paint());
$this->assertWantedPattern (‘/invalid/i’, $form[2]->paint());
}

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号