php设计模式 Command(命令模式)

 更新时间:2011年06月26日 10:49:42   作者:  
将一个请求封装为一个对象从而使你可用不同的请求对客户进行参数化,对请求排除或记录请求日志,以及支持可取消的操作
复制代码 代码如下:

<?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();

相关文章

  • PHP实现导入大量CSV数据的示例代码

    PHP实现导入大量CSV数据的示例代码

    这篇文章主要为大家详细介绍了PHP如何实现导入大量CSV数据功能,文中的示例代码讲解详细,对我们学习PHP有一定帮助,需要的可以参考一下
    2022-07-07
  • php实现获取文件mime类型的方法

    php实现获取文件mime类型的方法

    这篇文章主要介绍了php实现获取文件mime类型的方法,实例分析了php实现获取文件mime类型的各种常见技巧,非常具有实用价值,需要的朋友可以参考下
    2015-02-02
  • 从Web查询数据库之PHP与MySQL篇

    从Web查询数据库之PHP与MySQL篇

    PHP+MySQL的组合是构建网站的一个常见搭配,不过如何使用PHP通过Web访问MySQL数据库呢?下面从Web数据库架构的工作原理讲起。
    2009-09-09
  • PHP中国际化的字符串排序和比较对象详解

    PHP中国际化的字符串排序和比较对象详解

    这篇文章主要给大家介绍了关于PHP中国际化字符串排序和比较对象的相关资料,这在日常开发中经常会用到,本文通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • php面向对象的方法重载两种版本比较

    php面向对象的方法重载两种版本比较

    “重载”是类的多态的一种实现。函数重载指一个标识符被用作多个函数名,且能够通过函数的参数个数或参数类型将这些同名的函数区分开来,调用不发生混淆。这样做的主要好处就是,不用为了对不同的参数类型或参数个数,而写多个函数。
    2008-09-09
  • Php Image Resize图片大小调整的函数代码

    Php Image Resize图片大小调整的函数代码

    php下可以将图片大小调整的函数代码,需要的朋友可以参考下。
    2011-01-01
  • 腾讯微博提示missing parameter errorcode 102 错误的解决方法

    腾讯微博提示missing parameter errorcode 102 错误的解决方法

    这篇文章主要介绍了腾讯微博提示missing parameter errorcode 102 错误的解决方法,是针对腾讯微博接口开发中比较典型的错误问题,需要的朋友可以参考下
    2014-12-12
  • MySQL 日期时间函数常用总结

    MySQL 日期时间函数常用总结

    MySQL 日期时间函数常用总结,需要的朋友可以参考下
    2012-06-06
  • 详解cookie验证的php应用的一种SSO解决办法

    详解cookie验证的php应用的一种SSO解决办法

    这篇文章主要介绍了详解cookie验证的php应用的一种SSO解决办法的相关资料,希望通过本文能帮助到大家让大家遇到这种类似问题解决,需要的朋友可以参考下
    2017-10-10
  • php函数与传递参数实例分析

    php函数与传递参数实例分析

    这篇文章主要介绍了php函数与传递参数的方法,以实例形式分析了函数按值传递的具体用法,具有不错的参考借鉴价值,需要的朋友可以参考下
    2014-11-11

最新评论