php设计模式介绍之规范模式
非常 有用的。因为从一个规范类的方法isSatisfiedBy()中返回的结果是一个布尔值(boolean),把这些布尔 值运用到具体不同的规范类的效果都是相当好的。
为了实现逻辑与,我们创建一个类,把两个具 体的规范实例类组合起来,当给出的数据源参数同时满足给定的条件后就返回true。
你也可以类似的实现逻 辑或。
利用已经给出的“逻辑 ”规范和最初的一些规规范集合,你可以实现一些复杂的验证。
一开始,策 略工厂看起来有点零乱,主要是因为临时变量的数量阻止了单个具体规范的实例化。然而,代码中最有 趣的部分是使用或规范(OrSpecification)和与规范(AndSpecification)类(在上面高亮显示了)。 对email进行FieldEqualSpecification字段等价规范的两个实例化都被当作参数传递到或规范 (OrSpecification)的构造方法中。因为或规范(OrSpecification)执行了规范接口,这个 $jasons_email对象可以象任何其他具体的规范实例一样处理。事实上,在4行后它在又按照同样的方式 被使用,具体在new AndSpecification($male, $jasons_email)。 使用上面给出的方法器 PolicyFactor(上面的PolicyFactory),我们可以做到: $jason = PolicyFactory::createJasonPolicy(); $jason->isSatisfiedBy($datasource); 这两 行代码用于验证数据源$datasource的name字段的值是否是“jason”,它的age字段的值是否 至少大于30而且它的email是否是jsweat_PHP@yahoo.com或者jsweat@users.sourceforge.net。 从审美观点上来说,所有在构建具体规范过程中所出现的中间变量都是令人不高兴的。那么,有没有方 法来清除这些中间变量使得代码更加容易读和维护?是的,当然有!简单的利用PHP5的一个新特征来链 接到对象的方法并返回这个方法。 具体方法的第一步可能是允许单个具体的规范知道如何 “与”和“或”它自身。这可以通过引入Factory方法(具体请看第三章 ——工厂方法模式)来创建或规范(OrSpecification)和与规范(AndSpecification)对 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |