标签:
<?php interface ICommand { public function onCommand( $name ); } //为各个针对不同情况的函数,尽量用相同的处理函数 class CommandChain//主类 { private $_commands = array();//用来保存各种情况所对应的类的对象 public function addCommand( $cmd )//增加不同的“处理器” { $this->_commands []= $cmd; } public function runCommand( $name )//主类中的处理函数 { foreach( $this->_commands as $cmd )//将数组中存放的“处理器”依次调用,判断“处理器”中的方法是否相匹配,如果匹配,直接返回,不再往下执行 { if ($cmd->onCommand( $name )) { return; } } } } class UserCommand implements ICommand//第一个处理器,判断用户名中是否含有adduser { public function onCommand( $name ) { if ($name != ‘addUser‘ ) { return false; } echo "UserCommand handling ‘addUser‘\n"; return true; } } class MailCommand implements ICommand//第二个“处理器”。用来判断name中是否有mail { public function onCommand( $name ) { if ($name != ‘mail‘) { return false; } echo "MailCommand handling ‘mail‘\n"; return true; } } $cc = new CommandChain();//定义一个主类对象 $cc->addCommand( new MailCommand() );//添加处理器 $cc->addCommand( new UserCommand() );//添加处理器 $cc->runCommand( ‘addUser‘ );//输入参数adduser来处理 $cc->runCommand( ‘mail‘ ); ?>
这和之前的策略模式都很像,将几个“处理器”定义为类,都有相同的一个方法。
1.写出几个策略类,有相同的方法(用接口实现)
2.主类有一个数组用于保存插入的不同的策略函数的对象
3.主类中用循环取出不同的策略对象,调用对象的处理方法,返回true,程序就停止运行
标签:
原文地址:http://www.cnblogs.com/tobemaster/p/5767116.html