首页 > 编程语言 >浅谈PHP设计模式的命令模式

浅谈PHP设计模式的命令模式

时间:2022-11-09 19:11:41浏览次数:75  
标签:function PHP 浅谈 模式 命令 receiver 设计模式 public

简介:

命令模式,又称之为动作模式或者事务模式,属于行为型的设计模式。
将不同的请求封装成不同的请求对象,以便使用不同的请求;
角色都会用饭馆来举例子:
命令下达者:顾客
命令接受者:服务员
命令本身: 菜单
命令执行者:厨师

适用场景:

  1. Laravel的事件调度机制有用到了命令模式。
  2. 想要解耦服务端和调用端的时候。

优点:

  1. 当去修改命令的时候,直接与命令接受者进行通信,实现了客户端的命令发起与服务端命令执行者的解耦。
  2. 扩展性好,增加新的命令,既不会影响调用端,也方便服务端的扩展。

缺点:

增加类的数量进而增加复杂度。

代码:

//命令角色的抽象接口
interface CommandInterface {
    public function execute();
}

//命令角色(类似于菜单)
class PrintCommand implements CommandInterface {
    private $receiver;

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

    public function execute() {
        $this->receiver->exec('Hello World');
    }
}



//执行者(类似于初始)
class Receiver {
    public function exec(string $str) {
        echo $str;
    }
}


//命令接受者(类似于服务员)
class Invoker {
    private $command;

    public function setCommand(CommandInterface $cmd) {
        $this->command = $cmd;
    }

    public function run() {
        $this->command->execute();
    }
}



//调用端==========================================================
$receiver = new Receiver();
$invoker = new Invoker();
$invoker->setCommand(new PrintCommand($receiver));
$invoker->run();

标签:function,PHP,浅谈,模式,命令,receiver,设计模式,public
From: https://www.cnblogs.com/phpphp/p/16874842.html

相关文章

  • 设计模式利剑三--抽象工厂方法模型
    定   义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类优   点:           1、封装性,每个产品的实现类不是高层模块要关心的,他们......
  • 设计模式利剑4-模板方法模式
    定   义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤优   点:            1......
  • 设计模式利剑5-建造者模式
    定   义:将一个复杂对象的构建于它的表示分离,使得同样的构建过程可以创建不同的表示优   点:            1、封装性            2、建造者......
  • 设计模式利剑15-组合模式
    定     义:将对象组合成树形结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性优     点:              1、高层......
  • 设计模式简介及单例模式
    目录设计模式简介及单例模式单例模块实现的多种方式方式一:绑定给类的方法方式二:基于元类的类名加括号方式三:基于模块的单例模式方式四:定义一个装饰器实现单例模式方法五:基......
  • 设计模式利剑14-迭代器模式
    定     义:它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对对象的内部细节,,Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以......
  • 设计模式利剑17-门面模式
    定     义:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行,门面模式提供一个高层次的接口,使得子系统更易于使用优     点:           ......
  • 设计模式利剑22--享元模式
    定     义:使用共享对象可以有效地支持大量的细粒度的对象,享元模式可以避免大量非常相似类的开销。在程序设计中有时需要生成大量细             粒度的......
  • nginx适配thinkphp3.2.3
    环境centos7.9nginx1.23.2thinkphp3.2.3PHP7.4.30配置配置nginx默认位置在/usr/local/nginx/conf/nginx.conf主要配置location和location~\.php$server{li......
  • PHP WebService接口开发
    生成wsdl文件,php不能生成入参对象的形式,用java生成比较简单。安装IntelliJIDEAsdk:1.8(不要使用高版本)打开项目下载soap.zip,IDEA打开项目。左侧项目列表,右键项目......