<?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/