php与设计模式-命令模式

PHP设计模式之命令模式 在PHP中,我们可以通过定义命令接口、具体命令类、接收者接口和调用者类来实现命令模式。在本文中,我们将深入探讨PHP中的命令模式,并提供相应的源代码作为示例。在上面的示例中,我们首先创建了一个电视机对象(接收者),然后创建了具体的命令对象(打开电视、关闭电视、调整音量),并将接收者传递给这些具体命令对象。通过使用命令模式,我们可以将请求发送者和请求接收者解耦,使得发送者不需要知道命令的具体执行细节。这样,我们可以方便地添加新的命令或者修改现有的命令,而不需要修改发送者的代码。方法来设置要执行的命令。 阅读详情

命令模式

在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式。

Demo

<?php 
   /**
    * Created by PhpStorm.
    */ 

   /**
    * 电视机是请求的接收者,
   *遥控器上有一些按钮,不同的按钮对应电视机的不同操作。
   *抽象命令角色由一个命令接口来扮演,有三个具体的命令类实现了抽象命令接口,
   *这三个具体命令类分别代表三种操作:打开电视机、关闭电视机和切换频道。
   *显然,电视机遥控器就是一个典型的命令模式应用实例。
    */ 

   /**命令接收者
    * Class Tv
    */ 
   class Tv 
   { 
       public $curr_channel=0; 

       /**
        * 打开电视机
        */ 
       public function turnOn() 
       { 
           echo "The television is on."."<br/>"; 
       } 

       /**
        * 关闭电视机
        */ 
       public function turnOff() 
       { 
           echo "The television is off."."<br/>"; 
       } 

       /**切换频道
        * @param $channel    频道
        */ 
       public function turnChannel($channel) 
       { 
           $this->curr_channel=$channel; 
           echo "This TV Channel is ".$this->curr_channel."<br/>"; 
       } 
   } 

   /**执行命令接口
    * Interface ICommand
    */ 
   interface ICommand 
   { 
       function execute(); 
   }  

   /**开机命令
    * Class CommandOn
    */ 
   class CommandOn implements  ICommand 
   { 
       private $tv; 

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

       public function execute()  
       { 
           $this->tv->turnOn(); 
       } 
   } 

   /**关机命令
    * Class CommandOn
    */ 
   class CommandOff implements  ICommand 
   { 
       private $tv; 

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

       public function execute() 
       { 
           $this->tv->turnOff(); 
       } 
   } 

   /**切换频道命令
    * Class CommandOn
    */ 
   class CommandChannel implements  ICommand 
   { 
       private $tv; 
       private $channel; 

       public function __construct($tv,$channel) 
       { 
           $this->tv=$tv; 
           $this->channel=$channel; 
       } 

       public function execute() 
       { 
           $this->tv->turnChannel($this->channel); 
       } 
   } 

   /**遥控器
    * Class Control
    */ 
   class Control 
   { 
       private $_onCommand; 
       private $_offCommand; 
       private $_changeChannel; 

       public function __construct($on,$off,$channel) 
       { 
           $this->_onCommand = $on; 
           $this->_offCommand = $off; 
           $this->_changeChannel = $channel; 
       } 

       public function turnOn() 
       { 
           $this->_onCommand->execute(); 
       } 

       public function  turnOff() 
       { 
           $this->_offCommand->execute(); 
       } 

       public function changeChannel() 
       { 
           $this->_changeChannel->execute(); 
       } 
   } 

//测试代码 
// 命令接收者   
$myTv = new Tv(); 
// 开机命令   
$on = new CommandOn($myTv); 
// 关机命令   
$off = new CommandOff($myTv); 

// 频道切换命令   
$channel = new CommandChannel($myTv, 2); 
// 命令控制对象  
$control = new Control($on, $off, $channel); 
// 开机   
$control->turnOn(); 
// 切换频道   
$control->changeChannel(); 
// 关机   
$control->turnOff(); 

请关注我的订阅号

订阅号.png

Windows 2012 SYSVOL复制失败的处理 题外话:晓原理、知架构、查日志是排错的三件法宝今天在DC1上新建并链接了一个组策略对像,在客户端刷新时,却报下面的错误:“处理组策略失败。Windows无法应用组策略对象LDAP….”如下图所示:于是在客户端用\\domain.com访问,发现\\domain.com\SYSVOL\domain.com\policies下面没有上面报错的组策略对象。这是怎么一回事呢,pin... 阅读详情

相关推荐

声音编程(Voice Coding) Talon(一) 基本介绍与安装使用

语音编程平台简介 语音编程工具有哪些:Talon是一款声音编程平台,它追求的意义在于完全取代键盘和鼠标。。当前,全球有两个领先的语音编程平台(Programming-By-Speech Platforms)。一是Serenade,它的作用有点像数字助手,可以让你描述正在编程的命令,而不要求你必须逐字逐句地口述每条指令。另一个就是Talon,它提供了对每一行代码更精细的控制,这也意味着你需要对每一个被编入机器的任务有更细致的把握。具体的差别可以参考文章末尾的Serenade 和 Talon编程的例子。 除了这

yinglang19941010的专栏 4139

PHP-设计模式-命令模式

<?php /** * 命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。 * 调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 * * 意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。 * 主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设

eight_eyes的博客 179

Copula函数实战:如何用MATLAB计算气象干旱与农业干旱的联合概率?

本文提供了一份基于MATLAB的Copula函数实战指南,详细阐述了如何利用该多变量联合分布函数计算气象干旱与农业干旱的联合概率及条件概率。通过从数据预处理、边缘分布拟合到Copula模型选择与检验的完整流程,帮助环境科学与农业气象研究者量化干旱事件的关联风险,为风险评估提供定量依据。

weixin_29213655的博客 429

php设计模式好处,PHP设计模式之命令模式的深入解析

命令模式(Command),命令模式是封装一个通用操作的机制。如果你熟悉C或PHP,你可能已经遇到过Command,它相当于程序中的:回调(callback)。回调通常使用一个函数指针或数据结构如PHP中的字符串和数组实现,Command是在一个方法调用之上的抽象,它吸收了所有面向对象的好处:合成、继承和处理。例如,《设计模式》一书推荐使用Command存储用户行为链,以支持撤销和重做操作。注意P...

weixin_34558565的博客 110

别再只调电压了!深入理解数控电源的CC/CV模式与双闭环PID控制(以BUCK电路为例)

本文深入解析数控电源的CC/CV模式与双闭环PID控制技术,以BUCK电路为例,探讨如何通过双闭环控制优化负载突变响应和模式切换稳定性。文章详细介绍了电压环与电流环的协同工作原理、PID参数整定技巧及工程实践中的非线性补偿方法,帮助工程师提升电源设计的智能控制能力。

weixin_27017211的博客 261

从Level 1到Level 22:手把手带你用Burp Suite通关burp-labs靶场全关卡(附难点解析)

本文详细解析了如何使用Burp Suite通关burp-labs靶场的22个关卡,从基础爆破到复杂编码绕过,涵盖Intruder配置、响应过滤、POST请求处理、MD5爆破等关键技术。特别针对Level 16的三重编码和Level 20的中文响应处理等难点提供实战技巧,帮助渗透测试工程师提升Web安全实战能力。

weixin_28831461的博客 432

Php设计模式之【命令模式Command Pattern】

【案例】 黑枣玩具公司专门生产玩具,生产的玩具不限于狗、猫、狮子等四肢动物。每个玩具身上有两个按钮,分别支持两个操作——“张嘴”与“闭嘴”。 代码实现> <?php /** * 所有玩具需要实现的动作接口 */ interface Toy { /** * 玩具张嘴动作 * @abstract * @return mixed */

MMMMM 1402

博图编写温度程序_s7 smart200的CRC-16校验程序

最近做一个小项目,项目中采用485自由口通讯方式,使用一台西门子S7 smart200对一台冷水机做多个状态和温度做监控,并能对冷水机进行启停控制,和参数设置,因为冷水机的协议不是标准modbus格式,所以要自己编写通信协议。其中要用到CRC校验,在网上找了些别人写的程序,基本上用不了。只能自力更生了。首先,找到CRC校验的算法,并理解。 下面就是我找的算法(这个网上很多),1....

weixin_39539761的博客 3062

php 命令设计模式示例,PHP设计模式之命令模式的简单示例

这篇文章主要为大家详细介绍了PHP设计模式之命令模式的简单示例,具有一定的参考价值,可以用来参考一下。感兴趣的小伙伴,下面一起跟随512笔记的小玲来看看吧!命令模式(Command),命令模式是封装一个通用操作的机制。如果你熟悉C或PHP,你可能已经遇到过Command,它相当于程序中的:回调(callback)。回调通常使用一个函数指针或数据结构如PHP中的字符串和数组实现,Command是在一...

weixin_36043375的博客 139

汽车UDS诊断之诊断会话控制服务(0x10)深度剖析

DiagnosticSessionControl就是诊断会话控制。 请求消息定义 A_Data类型 参数名称 Cvt 字节值 助记符 #1 诊断会话控制请求SID M 0x10 DSC #2 子功能=[诊断会话类型] M 0x00-0xFF LEV_DS_ ...

心骗小白话的博客 7418

74、光谱成像在电子内窥镜及色彩理论中的应用

本文探讨了光谱成像在电子内窥镜中的应用及其与色彩理论的深度融合。通过分析FICE技术、色彩再现模型及胃黏膜光谱测量,展示了光谱信息在提升医学诊断准确性方面的潜力。同时,系统阐述了颜色的物理属性、标准表示方法、同色异谱现象、颜色测量技术(密度法与比色法)以及CIELAB等均匀颜色空间的构建原理。结合流程图与对比表格,梳理了从光信号获取到颜色处理的完整路径,并展望了人工智能与新型视觉模型在未来医疗成像与色彩科学中的发展方向。

g2h3i4j5的博客 152

php设计模式之命令模式

header("Content-Type:text/html;charset=utf-8"); /** * * @php设计模式之命令模式 * @命令模式顾名思义,下达命令,接收命令,执行命令 * @本例主要模拟古时皇帝给下面的人下达命令来解释什么是命令模式 **/ //执行命令 class Minitary { //执行派兵 public function battle() { echo

348

Java SSH框架学习

Java SSH框架学习

私信可回答各种问题~ 1789

PHP讲解设计模式:命令模式

首先,定义一个Command接口,所有具体的命令类都实现了这个接口。Command接口定义了execute方法,用于执行命令。php// Command 接口// Receiver 类表示接收者,负责执行实际的操作// ConcreteCommand 类表示具体的命令,实现了 Command 接口?在这个例子中,Command接口定义了execute方法,所有具体的命令类都实现了这个接口。Receiver类表示接收者,负责执行实际的操作。类表示具体的命令,它持有一个Receiver。

软件架构师笔记 967

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

php new command,PHP_php设计模式 Command(命令模式),<?php /** * 命令模式 * * 将一 - phpStudy...

php设计模式 Command(命令模式)/*** 命令模式** 将一个请求封装为一个对象从而使你可用不同的请求对客户进行参数化,对请求排除或记录请求日志,以及支持可取消的操作*/interface Command{public function execute();}class Invoker{private $_command = array();public function setCom...

weixin_30760143的博客 97

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

php命令模式什么意思,php 设计模式之 命令模式

1. 命令模式命令模式,也称为动作或者事务模式如用餐厅举列,菜单是这个实际的命令,服务员是这个命令的发送者,而厨师是这个命令的接收者。那么,这个模式解决了什么呢?当你要修改菜单的时候,只需要和服务员说就好了,她会转达给厨师,也就是说,我们实现了顾客和厨师的解耦。也就是 调用者与实现者的解耦。但是命令模式能够做到的是 让一个命令接收者实现多个命令(服务员下单、拿酒水、上菜),或者 把一条命令转达给多...

weixin_33076057的博客 161

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

php实现设计模式之 命令模式

<?php /* * 命令模式:(行为模式)将一个请求封装成一个对象(命令封装成对象),从而可以使用不同的请求对客户参数化(客户的不同请求,调不同的封装对象), * 对请求排序,或者记录请求日志,以及支持可取消的操作 * 1 命令接口:声明执行方法 2 发起者 : 记录、撤销请求,请求命令执行 3 接受者 : 命令的具体实现角色。 4 具体命令...

weixin_30788731的博客 64

设计模式-行为型设计模式-2.命令模式(php)

Design Pattern For PHP 设计模式类型 行为型设计模式 设计模式名称 命令模式 模式定义 命令模式(Command Pattern)属于行为模式之一,命令模式通过Command类封装对目标对象行为的调用以及参数传递,以让调用者-执行者松耦合。 UML 1、Receiver角色: 接受者,真正执行命令的对象。任何类都有可能成为接受者,只要它能够完成命令所定义的职责 2、Command抽象命令角色 定义命令接口,声明命令执行的方法 3、ConcreteCommand具体命令角色 实现了命令接

u014354882的博客 160

设计模式之命令模式 ,Php高级编程

上述代码中,我们定义了一个命令接收者 `Invoker` ,它持有一个命令对象,并通过 `execute()` 方法来执行命令对象的 `execute()` 方法。在使用示例中,我们首先创建了一个命令执行者对象 `$receiver`,然后创建了一个具体命令对象 `$command`,并将命令执行者对象传递给具体命令对象的构造函数。在使用示例中,我们创建了两个具体命令对象 `$command1` 和 `$command2`,并将它们添加到命令接收者对象 `$invoker` 的命令集合中。

AI 前沿技术实战博客:LLM / Agent / AI 制药 / 生信四大栏目日更,硬核干货 + 可复现代码,看完就能上手 974

php设计模式.chm,php设计模式 Command(命令模式)

本文为大家讲解的是php设计模式 中的 Command(命令模式)示例,感兴趣的同学参考下。将一个请求封装为一个对象从而使你可用不同的请求对客户进行参数化,对请求排除或记录请求日志,以及支持可取消的操作/*** 命令模式** 将一个请求封装为一个对象从而使你可用不同的请求对客户进行参数化,对请求排除或记录请求日志,以及支持可取消的操作*/interface Command{public funct...

weixin_42471823的博客 124

设计模式之命令模式--php实现命令模式

设计模式之命令模式–php实现命令模式 命令模式就是把命令封装成对象。 将一个请求封装为对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录日志,以及支持可撤销的操作。 为什么要使用命令模式 命令模式有哪些好处呢? 他能较容易的设计一个命令队列 在需要的情况下,可以较容易的将命令写入日志 允许接受请求的一方决定是否要否决请求 可以容易的实现对请求的撤销和重做 加入新的命令类更加容易 命令模式把请求一个操作的对象和直到怎么执行一个操作的对象分隔开。 比如服务员把操作的请求者客户和操作的执行者

大头讲架构的博客 190

php命令行脚本例子,php设计模式之命令模式使用示例

这篇文章主要介绍了php设计模式之命令模式使用示例,命令模式将一个请求封装为一个对象,从而你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销操作命令类:1.命令角色:声明了一个给所有具体命令类的抽象接口。这是一个抽象角色。2.具体命令角色:定义一个接受者和行为之间的弱耦合;实现execute方法,负责调用接受的相应操作。execute()方法通常叫做执行方法3.客户角色:创...

weixin_35390150的博客 91

php exec多条命令怎么拼接_PHP设计模式之命令模式

PHP设计模式之命令模式命令模式,也称为动作或者事务模式,很多教材会用饭馆来举例。作为顾客的我们是命令的下达者,服务员是这个命令的接收者,菜单是这个实际的命令,而厨师是这个命令的执行者。那么,这个模式解决了什么呢?当你要修改菜的时候,只需要和服务员说就好了,她会转达给厨师,也就是说,我们实现了顾客和厨师的解耦。也就是调用者与实现者的解耦。当然,很多设计模式可以做到这一点,但是命令模式能够做到的是让...

weixin_39563420的博客 150

php 工厂模式 实际应用,PHP设计模式应用实例(多态模式,工厂模式,命令模式)...

1、多态模式class pub {protected function working() {echo '这是一个可以重写的方法';}}class student extends pub {public function working() {echo '学生在学习';}}class teacher extends pub {public function working() {echo '老师在...

weixin_32591455的博客 137
上一篇: php与设计模式-备忘录模式
下一篇: php与设计模式-解释器模式
码哥说
博客等级 码龄8年 5645粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值