PHP设计模式命令(命令模式)

< PHP
/ * *
*命令模式
*
*将请求封装成一个对象,这样你可以参数化的客户有不同的要求,排除或记录请求日志请求,并支持可撤销的操作。
* /
接口命令
{
公共函数执行();
}

类的调用
{
私人_command美元=阵();
公共功能setcommand($命令){
美元-> _command { } = $命令;
}

公共功能executecommand()
{
foreach(美元-> _command达命令)
{
$命令>执行();
}
}

公共功能removecommand($命令)
{
关键= array_search美元(美元美元->命令,_command);
如果(键)!= false)
{
unset(美元-> _command { $关键});
}
}
}

类接收机
{
私人_name美元= null;

公共功能__construct($name){
美元-> _name = $名称;
}

公共职能行动()
{
echo $这-> _name。动作;
}

公共职能行动()
{
echo $这-> _name。行动;
}
}

类实现了命令ConcreteCommand
{
私人_receiver美元;
公共功能__construct($接收机)
{
美元-> _receiver = $接收机;
}

公共函数执行()
{
这_receiver美元-> ->行动();
}
}

类concretecommand1执行命令
{
私人_receiver美元;
公共功能__construct($接收机)
{
美元-> _receiver = $接收机;
}

公共函数执行()
{
这_receiver美元-> ->行动();
}
}

类concretecommand2执行命令
{
私人_receiver美元;
公共功能__construct($接收机)
{
$this->_receiver = $receiver;
}

公共函数执行()
{
这_receiver美元-> ->行动();
这_receiver美元-> ->行动();
}
}


objrecevier美元=新的接收器(第一);
objrecevier1美元=新的接收器(二);
objrecevier2美元=新的接收器(三中);

objcommand美元=新ConcreteCommand($ objrecevier);
objcommand1 =新concretecommand1美元(美元objrecevier);
objcommand2美元=新ConcreteCommand($ objrecevier1);
objcommand3 =新concretecommand1美元(美元objrecevier1);
objcommand4 =新concretecommand2美元(美元objrecevier2); / /两方法使用话筒

objinvoker美元=新的调用();
objinvoker -> setcommand美元(美元objcommand);
objinvoker -> setcommand美元(美元objcommand1);
objinvoker美元-> executecommand();
objinvoker -> removecommand美元(美元objcommand1);
objinvoker美元-> executecommand();

objinvoker -> setcommand美元(美元objcommand2);
objinvoker -> setcommand美元(美元objcommand3);
objinvoker -> setcommand美元(美元objcommand4);
objinvoker美元-> executecommand();
{代码}