zoukankan      html  css  js  c++  java
  • 使用PHP实现命令模式(转)

    <?php
    /**
     * 命令模式 2010-08-21 sz
     * @author phppan.p#gmail.com  http://www.phppan.com                                                       
     * 哥学社成员(http://www.blog-brother.com/)
     * @package design pattern
     */
     
    /**
     * 命令角色
     */
    interface Command {
     
        /**
         * 执行方法
         */
        public function execute();
    }
     
    /**
     * 具体命令角色
     */
    class ConcreteCommand implements Command {
     
        private $_receiver;
     
        public function __construct(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;
     
        public function __construct(Command $command) {
            $this->_command = $command;
        }
     
        public function action() {
            $this->_command->execute();
        }
    }
     
    /**
     * 客户端
     */
    class Client {
     
         /**
         * Main program.
         */
        public static function main() {
            $receiver = new Receiver('phpppan');
            $command = new ConcreteCommand($receiver);
            $invoker = new Invoker($command);
            $invoker->action();
        }
    }
     
    Client::main();
     
    ?>

    【命令模式协作】
    1、Client创建一个ConcreteCommand对象并指定它的Receiver对象
    2、某Invoker对象存储该ConcreteCommand对象
    3、该Invoker通过调用Command对象的execute操作来提交一个请求。若该命令是可撤消的,ConcreteCommand就在执行execute操作之前存储当前状态以用于取消命令。
    4、ConcreteCommand对象对调用它的Receiver的一些操作以执行该请求。

    转自:

    http://www.phppan.com/2010/08/php-design-pattern-15-comman/

  • 相关阅读:
    hdoj--1162--Eddy's picture(最小生成树)
    hdoj--1087--Super Jumping! Jumping! Jumping!(贪心)
    hdoj--1051--Wooden Sticks(LIS)
    hdoj--5532--Almost Sorted Array(正反LIS)
    CodeForces--609C --Load Balancing(水题)
    poj--2631--Roads in the North(树的直径 裸模板)
    CodeForces--606A --Magic Spheres(模拟水题)
    CodeForcess--609B--The Best Gift(模拟水题)
    hdoj--1201--18岁生日(模拟)
    poj--1985--Cow Marathon(树的直径)
  • 原文地址:https://www.cnblogs.com/dongruiha/p/6553875.html
Copyright © 2011-2022 走看看