php yii 命令行,命令行模式(Command)

命令行模式(Command)

3.2.1. 目的

为了封装调用和解耦。

我们有一个调用程序和一个接收器。 这种模式使用「命令行」将方法调用委托给接收器并且呈现相同的「执行」方法。 因此,调用程序只知道调用「执行」去处理客户端的命令。接收器会从调用程序中分离出来。

这个模式的另一面是取消方法的 execute(),也就是 undo() 。命令行也可以通过最小量的复制粘贴和依赖组合(不是继承)被聚合,从而组合成更复杂的命令集。

3.2.2. 例子

文本编辑器:所有事件都是可以被解除、堆放,保存的命令。

Symfony2:SF2 命令可以从 CLI 运行,它的建立只需考虑到命令行模式。

大型 CLI 工具使用子程序来分发不同的任务并将它们封装在「模型」中,每个模块都可以通过命令行模式实现(例如:vagrant)。

3.2.3. UML 图

hSXJ3cYequ.png

3.2.4. Code

你也可以在GitHub上查看 源码

CommandInterface.php

namespace DesignPatterns\Behavioral\Command;

interface CommandInterface

{

/**

* 这是在命令行模式中很重要的方法,

* 这个接收者会被载入构造器

*/

public function execute();

}

HelloCommand.php

namespace DesignPatterns\Behavioral\Command;

/**

* 这个具体命令,在接收器上调用 "print" ,

* 但是外部调用者只知道,这个是否可以执行。

*/

class HelloCommand implements CommandInterface

{

/**

* @var Receiver

*/

private $output;

/**

* 每个具体的命令都来自于不同的接收者。

* 这个可以是一个或者多个接收者,但是参数里必须是可以被执行的命令。

*

* @param Receiver $console

*/

public function __construct(Receiver $console)

{

$this->output = $console;

}

/**

* 执行和输出 "Hello World".

*/

public function execute()

{

// 有时候,这里没有接收者,并且这个命令执行所有工作。

$this->output->write('Hello World');

}

}

Receiver.php

namespace DesignPatterns\Behavioral\Command;

/**

* 接收方是特定的服务,有自己的 contract ,只能是具体的实例。

*/

class Receiver

{

/**

* @var bool

*/

private $enableDate = false;

/**

* @var string[]

*/

private $output = [];

/**

* @param string $str

*/

public function write(string $str)

{

if ($this->enableDate) {

$str .= ' ['.date('Y-m-d').']';

}

$this->output[] = $str;

}

public function getOutput(): string

{

return join("\n", $this->output);

}

/**

* 可以显示消息的时间

*/

public function enableDate()

{

$this->enableDate = true;

}

/**

* 禁止显示消息的时间

*/

public function disableDate()

{

$this->enableDate = false;

}

}

Invoker.php

namespace DesignPatterns\Behavioral\Command;

/**

*调用者使用这种命令。

* 比例 : 一个在 SF2 中的应用

*/

class Invoker

{

/**

* @var CommandInterface

*/

private $command;

/**

* 在这种调用者中,我们发现,订阅命令也是这种方法

* 还包括:堆栈、列表、集合等等

*

* @param CommandInterface $cmd

*/

public function setCommand(CommandInterface $cmd)

{

$this->command = $cmd;

}

/**

* 执行这个命令;

* 调用者也是用这个命令。

*/

public function run()

{

$this->command->execute();

}

}

3.2.5. Test

Tests/CommandTest.php

namespace DesignPatterns\Behavioral\Command\Tests;

use DesignPatterns\Behavioral\Command\HelloCommand;

use DesignPatterns\Behavioral\Command\Invoker;

use DesignPatterns\Behavioral\Command\Receiver;

use PHPUnit\Framework\TestCase;

class CommandTest extends TestCase

{

public function testInvocation()

{

$invoker = new Invoker();

$receiver = new Receiver();

$invoker->setCommand(new HelloCommand($receiver));

$invoker->run();

$this->assertEquals('Hello World', $receiver->getOutput());

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 获取 js json数据类型,JS基础-JS的数据类型和访问/流程控制/JSON格式字符串和js对象相互转换...

JS的数据类型和访问/流程控制/JSON格式字符串和js对象相互转换1. JS的数据类型和访问1.1. 原始类型JS中的原始数据类型有: number , string , boolean ;声明变量使用 var 关键字./* 数字类型 */varyear2020;/* 字符串类型 */varnamezhangsan;/* 布尔类型 */varisUpdatefalse;获…

python 数据挖掘论文,Orange:一个基于 Python 的数据挖掘和机器学习平台

Orange 简介Orange 是一个开源的数据挖掘和机器学习软件。Orange 基于 Python 和 C/C 开发,提供了一系列的数据探索、可视化、预处理以及建模组件。Orange 拥有漂亮直观的交互式用户界面,非常适合新手进行探索性数据分析和可视化展示;同时高级…

php量表是什么心理量表,心理学中的“5大心理学测评量表”你知道多少?

原标题:心理学中的“5大心理学测评量表”你知道多少?心理学知识中涵盖了类型丰富的心理学测评量表,你知道其中的多少呢?1、《应对方式问卷》《应对方式问卷》由肖计划等人参照国内外应对研究的问卷内容以及有关应对理论&#xff0…

php对象魔术方法,php学习之类与对象的魔术方法的使用

原标题:php学习之类与对象的魔术方法的使用魔术方法有哪些__construct:构造方法__destuct:析构方法__call:在对象中调用一个不可访问的方法时。__call()会被调用__callStatic:__get:调用不可访问的属性__se…

linux查看发起ddos攻击的ip,在Linux上使用netstat命令查证DDOS攻击的方法

导读DOS攻击或者DDOS攻击是试图让机器或者网络资源不可用的攻击。这种攻击的攻击目标网站或者服务通常是托管在高防服务器比如银行,信用卡支付网管,甚至根域名服务器。服务器出现缓慢的状况可能由很多事情导致,比如错误的配置,脚本…

linux应用程序逆向,Linux下查看并下载命令源码包(根据命令/应用程序逆向获取并且安装其所属源码包)...

使用linux的过程中,我们会熟悉各种命令,偶尔我们不禁会问,这些命令是怎么实现的,学习他们其实是学习linux高级系统编程很快捷的方法。这些命令的源码肯定是存放在相应的包里面,但是是哪些包呢?发行版的包管…

linux windows变色龙,体验开源变色龙SUSE Linux Enterprise Server 11

体验开源变色龙SUSE Linux Enterprise Server 11SUSE Linux Enterprise Server 11主要针对的是企业用户,SUSE产品分为SUSE Linux Enterprise Desktop(SLED)和SUSE Linux Enterprise Server(SLES)两个版本。笔者测试的版本为Server版本,主要面向SMB甚至是…

c语言数组下标越界检查程序,数组下标越界

已结贴√问题点数:20 回复次数:11数组下标越界题目是一个有10个元素的数组,存有10个考生的分数,写5个函数,分别计算总分,最高分,最低分,平均分,分数升序排列。我写了5函数…

weex android 性能,跨越适配性能那道坎,企鹅电竞Android weex优化

作者:龙泉,腾讯企鹅电竞工程师商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。WeTest 导读企鹅电竞从17年6月接入weex,到现在已经有一年半的时间,这段时间里面,针对遇到的问题,企鹅电…

华为5g鸿蒙折叠,华为5G折叠概念新机:内折叠+麒麟9000+鸿蒙OS 这才是华为的实力...

从手机二十多年的发展历史来看,现在很多形态各异的智能手机,其设计思路与功能机时代一样,比如三星Fold的折叠手机,就和功能机时代的翻盖手机类似,又或者OPPO的X 2021卷轴屏概念机,则和功能机时代的滑屏设计…

iis7.5配置 html,windows server 2008R2系统 IIS7.5配置伪静态的方法(urlrewrite)

这篇文章主要介绍了windows server 2008R2系统 IIS7.5配置伪静态页面 ,需要的朋友可以参考下从网上找了一下,原来微软IIS官方网站给IIS7及以后续版本提供了个URL重写组件。下载地址:http://www.iis.net/download/URLRewrite或者//www.iis7.com/softs/479…

cad多线段长度计算总和_没想到啊,我平时用的CAD多段线有这么多学问

很多人都说,CAD用多段线来代替直线绘图会比较方便,因为多段线除了常规直线功能之外,也能画弧线,更重要的是,一次命令执行的线条为一个整体,操作方便。难道多段线PL仅仅只有这明面上的实力吗?当然…

毕业与计算机专业,电子与计算机工程专业毕业后干什么

学分网给各位考生筛选整理了:电子与计算机工程专业毕业后能做什么,电子与计算机工程专业的就业去向,电子与计算机工程专业毕业后干什么,电子与计算机工程专业主要学习哪些课程,希望对大家有所帮助,更多的资…

网站备案靠谱吗_网站外包靠谱吗目前都是什么价位

网站外包靠谱吗先要防坑再说行情。说下网站外包那些容易入的坑,如果避开这些坑才能更好的做网站。经常遇到的问题如下假案例,吹牛逼:拿着别人的案例来忽悠,压根不是自己做的!消极怠工,拖延工期:…

浪潮n系列服务器指示灯_【科恩电气】通用薄型区域传感器 NA2N系列

强烈推荐NA2-N系列通用薄型区域传感器,用作保障人身安全的检测装置时,请务必使用光幕传感器。垂询电话:400-867-5758NA2-N8/NA2-N12/NA2-N16/NA2-N20/NA2-N24/NA2-N28全系列现货供应产品详细参数如下:最大检测高度540mm(28光轴)实…

品质主管每日工作需要做哪些_做微信社群运营需要用到哪些工具来铺助工作呢?...

对社群工作进行运营并不是人们想象的那般不需要风吹日晒,只需要待在房间里就能够轻松工作了。虽然这些工作人员不需要每天风吹日晒的,但是工作起来一点都不轻松,而且还非常的繁琐。其实对微信社群运营是需要采取一些辅助工具来帮忙的&#xf…

蚂蚁森林快捷指令_iPhone「快捷指令」怎么玩?玩法太多,别让这个功能吃灰

自iOS 12.1.4 系统更新之后,苹果就增加了「快捷指令」这一功能。熟练使用这个功能的小伙伴,可以让平时的生活工作效率大大提升,将一系列复杂的流程变得简单化;对于不熟悉这个功能的小伙伴而言,它只藏在手机角落的一个小…

分享按钮 html代码,超简洁微博分享按钮代码

摘要由于本站实现了全站https,百度分享的js就失效了,虽然用的不多但总还是少了点什么。本来打算把百度分享的所有资源下载到我的服务器上调用,但转念一想我就用一个微博分享和百度分享啊,干嘛如此麻烦!由于本站实现了全…

.rdlc 文件设置方向_在Word里面怎么设置把字竖着打出来?

如果是整篇的文字需要竖排,可以在菜单中依次打开【文件】-【页面设置】,找到【文字排列】设置为【垂直】。如果是部分竖排,则选中文字之后选择【插入】-【文本框】-【竖排】即可。操作步骤如下:1、整篇文档中的文字竖排&#xff1…

antd table排序会触发到分页怎么解决_多年管理系统开发经验总结~代码解决方案...

来源 | juejin.im/user/870468939940184 作者 | 前端小月月背景最近的你有没有接手的新项目,对这个有什么感觉?我最近接手了一个项目,先不论是否代码行数的多少,仅是思路就很混乱,像是一件衣服在打补丁,而…