手机版

深入分析PHP设计模式的命令模式

时间:2021-11-19 来源:互联网 编辑:宝哥软件园 浏览:

命令模式,这是一种封装常规操作的机制。如果你熟悉C或者PHP,可能遇到过Command,相当于程序中的回调。回调通常使用函数指针或数据结构来实现,比如PHP中的字符串和数组。命令是对方法调用的抽象,它吸收了面向对象的所有好处:合成、继承和处理。例如,《设计模式》这本书建议使用Command来存储用户行为链,以支持撤销和重做操作。注意,PHP 5.3的函数编程能力(闭包)可以看作是Command模式的局部实现,但是对每个命令层次结构使用抽象数据类型有利于类型安全。

在这种模式下,Invoker(调用者)知道传递给它的命令,不需要依赖真正的ConcreteCommand(具体命令)实现,从而通过配置解决了与方法调用相关的问题,比如UI控件按钮和菜单引用一个命令,它们的行为通过通用的concrete Command实例呈现。参与者:命令:在方法调用上面定义一个抽象;具体命令:一个操作的实现;调用程序:引用命令实例作为其可用操作。下面的代码显示了一个作为Command对象实现的Validator组件的例子:复制代码如下:/* * *命令抽象。*在这种情况下,实现必须返回一个结果。*有时它只有副作用。*/interface Validator { /** *该方法可以有任何参数。* @ param mixed * @返回boolean */public函数is valid($ value);} /** *混凝土命令。*/class MoreThanZeroValidator实现Validator { public function is valid($ value){ return $ value 0;} } /** *混凝土命令。*/class EvenValidator实现Validator { public function is valid($ value){ return $ value % 2==0;} } /** *调用程序。如果需要,一个实现可以存储多个* Validator。*/class Arraypprocessor { protected $ _ rule;public function _ _ construct(Validator $ rule){ $ this-_ rule=$ rule;}公共函数进程(数组$ numbers){ foreach($ numbers as $ n){ if($ this-_ rule-IsValid($ n)){ echo $ n,' \ n ';} } } } //客户端代码$ processor=new array processor(new even validator());$processor-process(数组(1,20,18,5,0,31,42));在PHP设计模式中使用命令模式的一些注意事项:在构造ConcreteCommand时可以提供方法调用中的一些参数,有效地局部应用了原函数;一个命令可以看作是一个非常简单的策略,只有一种方法,专注于对象的操作;具体命令还应该组织他们实现目标所需的每一个资源,主要是行为的接收者,它调用方法来执行命令;复合模式、装饰器模式等模式可以与Command模式结合,获得更多的命令、装饰命令等。

版权声明:深入分析PHP设计模式的命令模式是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。