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

设计模式之行为型模式—— 3.3 命令模式

时间:2015-02-17 23:42:08      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:设计模式   命令模式

<?php
/**
 * 3.3 命令模式
 * 定义:
 *      讲一个请求封装为一个对象,从而是你可用不同的请求对客
 *      户进行参数化;对请求排队或记录日志,以及支持可撤销的
 *      操作。
 * 角色:
 *      1. 抽象Command类
 *          职责:用来声明执行操作的接口。
 *      2. 具体Command类
 *          职责:将一个接收者对象绑定于一个动作,调用接收者
 *                相应的操作,以实现Execute。
 *      3. Invoker类
 *          职责:要求该命令执行这个请求。
 *      4. Receiver类
 *          职责:知道如何实施与执行一个与请求相关的操作,任
 *                何类都可能作为一个接受者。
 * 优点:
 *      1. 它能较容易地设计一个命令队列;
 *      2. 在需要的情况下,可以较容易地将命令记入日志;
 *      3. 允许接收请求的一方决定是否要否决请求;
 *      4. 可以容易的实现对请求的撤销和重做;
 *      5. 因为加进新的具体命令类不影响其他的类,因此增加新
 *         的具体命令类很容易;
 *      6. 把请求一个操作的对象与知道怎么执行一个操作的对象
 *         分隔开。
 * 缺点:
 *      1. 有可能会导致某些系统有过多的具体命令类。因为针对
 *         每一个命令都需要设计一个具体命令类,因此某些系统
 *         需要大量具体命令类,这将影响命令模式的使用。
 * 使用场景:
 *      1. 系统需要将请求调用者和请求接收者解耦,使得调用者
 *         和接收者不直接交互。
 *      2. 系统需要在不同的时间指定请求、将请求排队和执行请
 *         求。
 *      3. 系统需要支持命令的撤销操作和恢复操作。
 *      4. 系统需要将一组操作组合在一起,即支持宏命令。
 *
 */
header(‘content-type:text/html;charset=utf8‘);
//抽象Command类
abstract class Command{
    protected $receiver;
    public function __construct($receiver){
        $this->receiver=$receiver;
    }
    abstract public function execute();
}
//具体Command类
class ConcreteCommand extends Command{
    public function execute(){
        $this->receiver->action();
    }
}
//Invoker类
//此类是用来接收来自客户端的请求,然后将请求转化为命令的执行
//命令执行的动作,最后是由最终的接受者来处理的。
class Invoker{
    private $cmd;
    public function setCommand(Command $cmd){
        $this->cmd=$cmd;
    }
    public function executeCommand(){
        $this->cmd->execute();
    }
}
//Receiver类
class Receiver{
    public function action(){
        echo ‘执行请求‘;
    }
}

//客户端
//请求命令的发起者
$invoker=new Invoker();
//请求命令的最终执行者
$receiver=new Receiver();
//具体的请求
$cmd=new ConcreteCommand($receiver);

//表示要设置并执行哪个请求(命令)
$invoker->setCommand($cmd);
$invoker->executeCommand();


本文出自 “一切皆有可能” 博客,请务必保留此出处http://noican.blog.51cto.com/4081966/1614785

设计模式之行为型模式—— 3.3 命令模式

标签:设计模式   命令模式

原文地址:http://noican.blog.51cto.com/4081966/1614785

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