码迷,mamicode.com
首页 > 其他好文 > 详细

B6:命令模式 Command

时间:2017-11-06 11:19:12      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:cti   blog   es2017   cut   this   nbsp   src   影响   ons   

将一个请求封装成一个对象,从而可以用不同的请求对象对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作.

使用场景:
1.可设计一个队列
2.较容易将命令计入日志
3.允许接收的一方是决定是否否决请求
4.可以实现对请求的撤销和重做
5.加入新的命令类不影响其他的类.
6.把请求一个操作的对象与执行操作的对象分离开.

UML

技术分享

 

示例代码:

abstract class  Command
{
    protected $receiver;

    public function __construct(Receiver $receiver)
    {
        $this->receiver = $receiver;
    }

    abstract public  function execute($params);
}

class UserCommand extends Command
{
    public function execute($params)
    {
        return $this->receiver->command($params);
    }
}


interface Receiver
{
    public function command($params);
}

class User implements Receiver
{
    public function command($parms)
    {
        echo ‘写入日志:用户增加成功‘ . $parms;
    }
}


class Invoker
{
    protected $command;

    public function setCommand(Command $command)
    {
        $this->command = $command;
    }

    public function execute($params)
    {
        return $this->command->execute($params);
    }
}

$receiver = new User();

$invoker = new Invoker();
$invoker->setCommand(new UserCommand($receiver));
$invoker->execute(‘jack‘);

  

 

B6:命令模式 Command

标签:cti   blog   es2017   cut   this   nbsp   src   影响   ons   

原文地址:http://www.cnblogs.com/itfenqing/p/7791492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!