资讯专栏INFORMATION COLUMN

php设计模式之命令模式

niuxiaowei111 / 2042人阅读

摘要:命令模式概念将请求封装成对象,以便使用不同的请求队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。从而实现行为请求者与行为实现者的松耦合。

命令模式概念

将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
从而实现“行为请求者”与“行为实现者”的松耦合。

命令模式成员

抽象命令(Command):定义命令的接口,声明执行的方法(execute、undo)
具体命令(ConcreteCommand):命令接口实现对象,通常会持有接收者,并调用接收者的功能来完成命令要执行的操作
接收者(Receiver):执行命令的对象
请求者(Invoker):调用命令对象执行请求

类图

实例
light = $light;
    }

    public function execute()
    {
        $this->light->on();
    }

    public function undo()
    {
        $this->light->off();
    }
}

/**
 * 具体命令(ConcreteCommand)
 * Class LightOff
 */
class LightOff implements Command{
    private $light;

    public function __construct(Light $light)
    {
        $this->light = $light;
    }

    public function execute()
    {
        $this->light->off();
    }

    public function undo()
    {
        $this->light->on();
    }
}

/**
 * 请求者(Invoker)
 * Class Control
 */
class Control{

    protected $object;

    public function __construct($object)
    {
        $this->object = $object;
    }

    public function exec(){
        $this->object->execute();
    }

    public function undo(){
        $this->object->undo();
    }

}

$light = new Light();
$light_on = new LightOn($light);
$control = new Control($light_on);
$control->exec();
echo "
"; $control->undo();
设计原则

1.封装变化
2.多用组合,少用继承
3.针对接口编程,不针对实现编程
4.为交互对象之间松耦合设计而努力
5.类应该对扩展开放,对修改关闭
6.依赖抽象、不要依赖具体类

总结

1.命令模式将发出请求的对象和执行请求的对象解耦
2.在被解耦的两者之间通过命令对象进行沟通。命令对象封装了接收者和一个或一组动作
3.调用者通过调用命令对象的execute方法发出请求,这样使得接受者的动作被调用
4.调用者可以接受命令当做参数,甚至在运行时动态的进行
5.命令可以支持撤销,做法实现一个undo的方法来回到execute被执行前的状态
6.命令也可以用来实现日志、事物系统、队列

参考文献《head first设计模式》

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22559.html

相关文章

  • php 设计模式工厂模式、单例模式、注册树模式

    摘要:的设计模式有很多种,本文取最简单的三种模式工厂模式单例模式和注册树模式进行简单的讲解。文件创建完后,咱们回到单元测试文件文件再执行一下单元测试命令发现,也能返回成功,这样的话我们就能很方便的修改任何驱动了。 php 设计模式之工厂模式、单例模式、注册树模式 在软件工程中,创建型设计模式承担着对象创建的职责,尝试创建适合程序上下文的对象,对象创建设计模式的产生是由于软件工程设计的问题,具...

    liangzai_cool 评论0 收藏0
  • PHP设计模式命令模式

    摘要:概念将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化。用于行为请求者与行为实现者解耦,可实现二者之间的松耦合,以便适应变化。角色命令在一个方法调用之上定义一个抽象具体的命令一个操作的实现调用者引用实例作为它可用的操作。 概念 将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化。用于行为请求者与行为实现者解耦,可实现二者之间的松耦合,以便适应变化...

    scq000 评论0 收藏0
  • PHP回顾IO

    摘要:命令行时返回值为,标准输入输出均指向终端可用进程号查看。会在脚本执行完毕后关闭三个流,无需用户手动关闭。与远程网址交互是一个请求和响应的过程,其中细节可参考本人之前的文章回顾之请求和回顾之响应,也可参考协议的权威文档。 转载请注明文章出处: https://tlanyan.me/php-review... PHP回顾系列目录 PHP基础 web请求 cookie web响应 ses...

    happen 评论0 收藏0
  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    Dionysus_go 评论0 收藏0
  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    vspiders 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<