手机
当前位置:查字典教程网 >编程开发 >php教程 >php设计模式 Command(命令模式)
php设计模式 Command(命令模式)
摘要:

<?php

/**

* 命令模式

*

* 将一个请求封装为一个对象从而使你可用不同的请求对客户进行参数化,对请求排除或记录请求日志,以及支持可取消的操作

*/

interface Command

{

public function execute();

}

class Invoker

{

private $_command = array();

public function setCommand($command) {

$this->_command[] = $command;

}

public function executeCommand()

{

foreach($this->_command as $command)

{

$command->execute();

}

}

public function removeCommand($command)

{

$key = array_search($command, $this->_command);

if($key !== false)

{

unset($this->_command[$key]);

}

}

}

class Receiver

{

private $_name = null;

public function __construct($name) {

$this->_name = $name;

}

public function action()

{

echo $this->_name." action<br/>";

}

public function action1()

{

echo $this->_name." action1<br/>";

}

}

class ConcreteCommand implements Command

{

private $_receiver;

public function __construct($receiver)

{

$this->_receiver = $receiver;

}

public function execute()

{

$this->_receiver->action();

}

}

class ConcreteCommand1 implements Command

{

private $_receiver;

public function __construct($receiver)

{

$this->_receiver = $receiver;

}

public function execute()

{

$this->_receiver->action1();

}

}

class ConcreteCommand2 implements Command

{

private $_receiver;

public function __construct($receiver)

{

$this->_receiver = $receiver;

}

public function execute()

{

$this->_receiver->action();

$this->_receiver->action1();

}

}

$objRecevier = new Receiver("No.1");

$objRecevier1 = new Receiver("No.2");

$objRecevier2 = new Receiver("No.3");

$objCommand = new ConcreteCommand($objRecevier);

$objCommand1 = new ConcreteCommand1($objRecevier);

$objCommand2 = new ConcreteCommand($objRecevier1);

$objCommand3 = new ConcreteCommand1($objRecevier1);

$objCommand4 = new ConcreteCommand2($objRecevier2); // 使用 Recevier的两个方法

$objInvoker = new Invoker();

$objInvoker->setCommand($objCommand);

$objInvoker->setCommand($objCommand1);

$objInvoker->executeCommand();

$objInvoker->removeCommand($objCommand1);

$objInvoker->executeCommand();

$objInvoker->setCommand($objCommand2);

$objInvoker->setCommand($objCommand3);

$objInvoker->setCommand($objCommand4);

$objInvoker->executeCommand();

[/code]

【php设计模式 Command(命令模式)】相关文章:

php页面缓存ob系列函数介绍

php实现格式化多行文本为Js可用格式

php中smarty模板条件判断用法实例

PHP入门速成(3)

php中header跳转使用include包含解决参数丢失问题

php将字符串随机分割成不同长度数组的方法

PHP模板引擎SMARTY

DOMXML函数笔记

PHP设计模式之适配器模式代码实例

PHP&MYSQL服务器配置说明

精品推荐
分类导航