宝哥软件园

学习php设计模式php实现命令模式(command)

编辑:宝哥软件园 来源:互联网 时间:2021-09-20

1.目的是将一个请求封装到一个对象中,以便用您可用的不同请求来参数化客户;排队或记录请求,并支持可逆操作。变量方面是何时以及如何满足:中的请求。命令模式是命令的封装。命令模式将发布命令的责任与执行命令的责任分开,并将它们委托给不同的对象。请求方发出执行操作的请求;接收方接收请求并执行操作。命令模式允许请求方和接收方独立,这样请求方就不需要知道接收方的接口,更不需要知道请求是如何收到的,以及操作是否、何时、如何执行的。二、指挥模式结构图。

3.命令模式中的主要角色命令角色:为所有特定的命令类声明一个抽象接口。这是一个抽象的角色。具体命令的作用:定义接收者和行为之间的弱耦合;实现Execute()方法,负责调用接收测试的相应操作。Execute()方法通常称为执行方法。客户端角色:创建一个混凝土命令对象并确定它的接收者。Invoker角色:负责调用命令对象执行请求,相关方法称为action方法。接收者角色:负责实现和执行请求。任何类都可以是接收者,实现和执行请求的方法称为动作方法。4.指挥模式的优势指挥模式的优势:1。命令模式将请求操作的对象与知道如何执行操作的对象分开。2.命令类和其他类一样,可以修改和推广。3.命令对象可以聚合在一起,并合成为合成命令。4.您可以轻松添加新的命令类。命令模式的缺点:在某些系统中可能会导致过多的特定命令类。五、指挥模式1的应用场景。抽象要执行的操作以参数化对象。命令模式是回调机制的面向对象替代品。2.在不同的时间指定、安排和执行请求。3.支持取消操作。4.支持修改日志。5.构建一个基于基本操作的高级操作系统。命令模式提供了一种建模事务的方法。命令有一个公共接口,因此您可以以相同的方式调用所有事务。同时,很容易添加新的事务来扩展系统。不及物动词命令模式与其他模式的复合模式(Composite mode):复合模式可以实现为宏命令原型模式(prototype mode):如果命令类有clone(或者上一篇文章提到的copy方法)方法,则可以复制命令。当命令模式支持多次取消以复制当前状态的命令对象时,可能需要此模式。七.命令模式PHP示例。

?php/** *命令角色*/接口命令{ /** *执行方法*/public函数execute();} /** * 具体命令角色*/class混凝土命令实现命令{私有$ _ receiver公共函数_ _构造(Receiver $ Receiver){ $ this-_ Receiver=$ Receiver;} /** * 执行方法*/public function execute(){ $ this-_ receiver-action();}} /** * 接收者角色*/class Receiver { /*接收者名称*/private $ _ name;public function _ _ construct($ name){ $ this-_ name=$ name;} /** * 行动方法*/public function action(){ echo $ this-_ name,' do action。br/';}} /** * 请求者角色*/class Invoker { private $ _ command;公共函数_ _构造(Command $ Command){ $ this-_ Command=$ Command;} public function action(){ $ this-_ command-execute();}} /** * 客户端*/class Client { /** *主程序*/public static function main(){ $ Receiver=new Receiver(' phpppan ');$ command=新的具体命令($ receiver);$ Invoker=新的Invoker($ command);$ invoker-action();} }客户端:3360 main();八、命令模式协作1、客户创建一个混凝土命令对象并指定它的接收器对象2、某调用程序对象存储该混凝土命令对象3、该调用程序通过调用命令对象的执行操作来提交一个请求。若该命令是可撤消的,混凝土命令就在执行执行操作之前存储当前状态以用于取消命令4、具体命令对象对调用它的接收器的一些操作以执行该请求。九、宏命令在这里,我们以一个简单的增加和粘贴功能为例,将这两个命令组成一个宏命令。我们可以新建复制命令和粘贴命令,然后将其添加到宏命令中去。如下所示代码:

?php/** *命令角色*/接口命令{ /** *执行方法*/public函数execute();} /** * 宏命令接口*/接口宏命令扩展命令{ /** *宏命令聚集的管理方法,可以删除一个成员命令* @param命令$command */public函数移除(命令$ Command);/** * 宏命令聚集的管理方法,可以增加一个成员命令* @param命令$command */public函数添加(Command $ Command);}类demoncommand实现了宏命令{ private $ _ commandlist public function _ _ construct(){ $ this-_ command list=array();}公共函数remove(Command $ Command){ $ key=array _ search($ Command,$ this-_ Command list);if($ key===FALSE){ 0返回假;} unset($ this-_ command list[$ key]);返回真;}公共函数add(Command $ Command){ return array _ push($ this-_ Command list,$ Command);} public function execute(){ foreach($ this-_ command list as $ command){ $ command-execute();} } } /** * 具体拷贝命令角色*/类复制命令实现命令{私有$ _ receiver公共函数_ _构造(Receiver $ Receiver){ $ this-_ Receiver=$ Receiver;} /** * 执行方法*/public function execute(){ $ this-_ receiver-copy();}} /** * 具体拷贝命令角色*/class PasteCommand实现命令{私有$ _ receiver公共函数_ _构造(Receiver $ Receiver){ $ this-_ Receiver=$ Receiver;} /** * 执行方法*/public function execute(){ $ this-_ receiver-paste();}} /** * 接收者角色*/class Receiver { /*接收者名称*/private $ _ name;public function _ _ construct($ name){ $ this-_ name=$ name;} /** * 复制方法*/public function copy(){ echo $ this-_ name,' do copy action。br/';} /** * 粘贴方法*/public function paste(){ echo $ this-_ name,'执行粘贴操作。br/';}} /** * 请求者角色*/class Invoker { private $ _ command;公共函数_ _构造(Command $ Command){ $ this-_ Command=$ Command;} public function action(){ $ this-_ command-execute();}} /** * 客户端*/class Client { /** *主程序*/public static function main(){ $ Receiver=new Receiver(' phpppan ');$ pasteCommand=new pasteCommand($ receiver);$copyCommand=新的复制命令($ receiver);$ macroCommand=new democorcommand();$ macroCommand-add($ copy命令);$ macroCommand-add($ pasteCommand);$ Invoker=新的Invoker($ macroCommand);$ invoker-action();$ macroCommand-remove($ copy命令);$ Invoker=新的Invoker($ macroCommand);$ invoker-action();} }客户端:3360 main();以上就是使用服务器端编程语言(专业超文本预处理器的缩写)实现命令模式的代码,还有一些关于命令模式的概念区分,希望对大家的学习有所帮助。

更多资讯
游戏推荐
更多+