<ol
class
=
"dp-c"
>
<li
class
=
"alt"
><span><span><?php </span></span></span></li>
<li>
<span
class
=
"comment"
><font color=
"#008200"
>
</font></span><span> </span></span></li>
<li
class
=
"alt"
>
<span
class
=
"keyword"
><strong><font color=
"#006699"
>
interface
</font></strong></span><span> Validator </span>
</li>
<li><span>{ </span></li>
<li
class
=
"alt"
>
<span> </span><span
class
=
"comment"
><font color=
"#008200"
>
</font></span><span> </span></span></li>
<li>
<span> </span><span
class
=
"keyword"
><strong><font color=
"#006699"
>
public
</font></strong></span><span> </span><span
class
=
"keyword"
><strong><font color=
"#006699"
>
function
</font></strong></span><span> isValid(</span><span
class
=
"vars"
><font color=
"#dd0000"
>
$value
</font></span><span>); </span>
</li>
<li
class
=
"alt"
><span>} </span></li>
<li><span> </span></li>
<li
class
=
"alt"
>
<span
class
=
"comment"
><font color=
"#008200"
>
</font></span><span> </span></span></li>
<li>
<span
class
=
"keyword"
><strong><font color=
"#006699"
>
class
</font></strong></span><span> MoreThanZeroValidator </span><span
class
=
"keyword"
><strong><font color=
"#006699"
>
implements
</font></strong></span><span> Validator </span>
</li>
<li
class
=
"alt"
><span>{ </span></li>
<li>
<span> </span><span
class
=
"keyword"
><strong><font color=
"#006699"
>
public
</font></strong></span><span> </span><span
class
=
"keyword"
><strong><font color=
"#006699"
>
function
</font></strong></span><span> isValid(</span><span
class
=
"vars"
><font color=
"#dd0000"
>
$value
</font></span><span>) </span>
</li>
<li
class
=
"alt"
><span> { </span></li>
<li>
<span> </span><span
class
=
"keyword"
><strong><font color=
"#006699"
>
return
</font></strong></span><span> </span><span
class
=
"vars"
><font color=
"#dd0000"
>
$value
</font></span><span> > 0; </span>
</li>
<li
class
=
"alt"
><span> } </span></li>
<li><span>} </span></li>
<li
class
=
"alt"
><span> </span></li>
<li>
<span
class
=
"comment"
><font color=
"#008200"
>
</font></span><span> </span></span></li>
<li
class
=
"alt"
>
<span
class
=
"keyword"
><strong><font color=
"#006699"
>
class
</font></strong></span><span> EvenValidator </span><span
class
=
"keyword"
><strong><font color=
"#006699"
>
implements
</font></strong></span><span> Validator </span>
</li>
<li><span>{ </span></li>
<li
class
=
"alt"
>
<span> </span><span
class
=
"keyword"
><strong><font color=
"#006699"
>
public
</font></strong></span><span> </span><span
class
=
"keyword"
><strong><font color=
"#006699"
>
function
</font></strong></span><span> isValid(</span><span
class
=
"vars"
><font color=
"#dd0000"
>
$value
</font></span><span>) </span>
</li>
<li><span> { </span></li>
<li
class
=
"alt"
>
<span> </span><span
class
=
"keyword"
><strong><font color=
"#006699"
>
return
</font></strong></span><span> </span><span
class
=
"vars"
><font color=
"#dd0000"
>
$value
</font></span><span> % 2 == 0; </span>
</li>
<li><span> } </span></li>
<li
class
=
"alt"
><span>} </span></li>
<li><span> </span></li>
<li
class
=
"alt"
>
<span
class
=
"comment"
><font color=
"#008200"
>
</font></span><span> </span></span></li>
<li
class
=
"alt"
>
<span
class
=
"keyword"
><strong><font color=
"#006699"
>
class
</font></strong></span><span> ArrayProcessor </span>
</li>
<li><span>{ </span></li>
<li
class
=
"alt"
>
<span> </span><span
class
=
"keyword"
><strong><font color=
"#006699"
>
protected
</font></strong></span><span> </span><span
class
=
"vars"
><font color=
"#dd0000"
>PHP设计模式漫谈我们已经连载了四期,我们知道了代理模式、责任链模式和<font color=
"#0000ff"
>结构模式</font>;今天我们一起来讨论的是命令模式(Command),命令模式是封装一个通用操作的机制。
<p>如果你熟悉C或PHP,你可能已经遇到过Command,它相当于程序中的:回调(callback)。回调通常使用一个函数指针或数据结构如PHP中的字符串和数组实现,Command是在一个方法调用之上的抽象,它吸收了所有面向对象的好处:合成、继承和处理。</p>
<p>例如,《设计模式》一书推荐使用Command存储用户行为链,以支持撤销和重做操作。</p>
<p>注意PHP 5.3函数编程能力(闭包)可以被当做Command模式的一个本地实现,但为每一个命令层次结构使用抽象数据类型有助于类型安全。</p>
<p style=
"TEXT-ALIGN: center"
><img
class
=
"fit-image lazy"
src=
"/static/imghw/default1.png"
data-src=
"http://img.bitscn.com/upimg/allimg/100413/115P52291-0.jpg"
onmousewheel=
"javascript:return big(this)"
style=
"max-width:90%"
style=
"max-width:90%"
alt=
"PHP设计模式中的命令模式"
style=
"max-width:90%"
onload=
"javascript:if(this.width>498)this.style.width=498;"
border=
"0"
> <br><strong><span style=
"FONT-SIZE: smaller"
><font size=
"2"
>PHP设计模式中的命令模式</font></span></strong></p>
<p>在这个模式中,Invoker(调用者)知道传递给它的Command,无需依赖于真实的ConcreteCommand(具体的命令)实现,解决了通过配置进行方法调用相关的问题,如UI控件按钮和菜单等引用一个Command,它们的行为是通过通用的ConcreteCommand实例呈现的。</p>
<p><strong>参与者:</strong></p>
<p>◆Command(命令):在一个方法调用之上定义一个抽象;</p>
<p>◆ConcreteCommand(具体的命令):一个操作的实现;</p>
<p>◆Invoker(调用者):引用Command实例作为它可用的操作。</p>
<p>下面的代码展示了Validator组件作为Command对象实现的示例:</p>
<pre
class
=
"brush:php;toolbar:false"
>___FCKpd___0