学习设计模式笔记——命令链模式
时间:2011-10-05
来源:互联网
命令链模式以松散的耦合主题为基础,发送消息,命令和请求,或通过一组处理程序发送任意内容。每个处理程序都会自行判断自己能否处理请求。如果可以,则请求被处理,进程停止。可以为系统添加或移除处理程序,而不影响其他处理程序。
PHP代码示例:
<?php
interface ICommand
{
function onCommand($name,$args);
}
class CommandChain
{
private $Commands=array();
public function addCommand($cmd)
{
$this->_Commands[]=$cmd;
}
public function runCommand($name,$args)
{
foreach($this->_commands as $cmd)
{
if($cmd->onCommand($name,$args))
{
return;
}
}
}
}
class UserCommand implements ICommand
{
public function onCommand($name,$args)
{
if($name!='addUser')
{
return false;
}
echo "UserCommand handling 'addUser' <br />";
return true;
}
}
class MailCommand implements ICommond
{
public function onCommand($name,$args)
{
if($name!='mail')
{
return false;
}
echo "MailCommand handing 'mail' <br />";
rerun true;
}
}
$cc=new CommandChain();
$cc->addCommand(new UserCommand());
$cc->addCommand(new MailCommmand());
$cc->runCommand('addUser',null);
$cc->runCommand('mail',null);
?>
PHP代码示例:
<?php
interface ICommand
{
function onCommand($name,$args);
}
class CommandChain
{
private $Commands=array();
public function addCommand($cmd)
{
$this->_Commands[]=$cmd;
}
public function runCommand($name,$args)
{
foreach($this->_commands as $cmd)
{
if($cmd->onCommand($name,$args))
{
return;
}
}
}
}
class UserCommand implements ICommand
{
public function onCommand($name,$args)
{
if($name!='addUser')
{
return false;
}
echo "UserCommand handling 'addUser' <br />";
return true;
}
}
class MailCommand implements ICommond
{
public function onCommand($name,$args)
{
if($name!='mail')
{
return false;
}
echo "MailCommand handing 'mail' <br />";
rerun true;
}
}
$cc=new CommandChain();
$cc->addCommand(new UserCommand());
$cc->addCommand(new MailCommmand());
$cc->runCommand('addUser',null);
$cc->runCommand('mail',null);
?>
作者: 星汉 发布时间: 2011-10-05
此代码定义维护ICommand对象列表的CommandChain类。两个类都可以实现ICommand接口——一个对邮件的请求做出响应,另一个对添加用户做出响应。
代码首先创建CommandChain对象,并为它添加两个命令对象的实例。然后运行两个命令以查看谁对这些命令做出了响应。如果命令的名称匹配UserCommand 或 MailCommand,则代码失败,不发生任何操作。
代码首先创建CommandChain对象,并为它添加两个命令对象的实例。然后运行两个命令以查看谁对这些命令做出了响应。如果命令的名称匹配UserCommand 或 MailCommand,则代码失败,不发生任何操作。
作者: 星汉 发布时间: 2011-10-05
这个还是第一次说
作者: tangxuewu 发布时间: 2011-10-05
这不是所谓的观察者模式,怎么又变成了命令链模式了,这个命名是不是随个人喜好的,那我也要安个新名字给它,叫擦菊花模式.
作者: PHP人 发布时间: 2011-10-05
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28