2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > php设计模式 命令行模式 [设计模式]PHP设计模式之命令行模式

php设计模式 命令行模式 [设计模式]PHP设计模式之命令行模式

时间:2022-11-08 21:42:15

相关推荐

php设计模式 命令行模式 [设计模式]PHP设计模式之命令行模式

本次为大家贴一段PHP的设计模式练习代码

大家可以将代码复制下来测试,本例代码都是测试执行过的

/** * Command 命令模式 * * @abstract * @package * @version $id$ * @copyright - yjj * @author YJJ * @license PHP Version 5.2.6 {@link /} */abstract class Command { protected $receiver; public function __construct($receiver) { $this->receiver = $receiver; } public abstract function ExcuteCommand();}/** * BakeMuttonCommand 烤羊肉串命令 * * @uses Command * @package * @version $id$ * @copyright - yjj * @author YJJ * @license PHP Version 5.2.6 {@link /} */class BakeMuttonCommand extends Command { public function __construct($receiver) { parent::__construct($receiver); } public function ExcuteCommand() { $this->receiver->BakeMutton(); }}/** * BakeChickenWingCommand 烤鸡翅命令 * * @uses Command * @package * @version $id$ * @copyright - yjj * @author YJJ * @license PHP Version 5.2.6 {@link /} */class BakeChickenWingCommand extends Command { public function __construct($receiver) { parent::__construct($receiver); } public function ExcuteCommand() { $this->receiver->BakeChickenWing(); }}/** * Waiter 服务员 KEY有点问题 需要处理 * * @package * @version $id$ * @copyright - yjj * @author YJJ * @license PHP Version 5.2.6 {@link /} */class Waiter { private $command = array(); public function SetOrder($command, $content = null) { if (null !== $content) { echo '服务员:' . $content . ',请烤点别的吧'; } else { $this->command[] = $command; //$this->command[md5(serialize($command))] = $command; } } public function CancelOrder($command) { //unset($this->command[md5(serialize($command))]); } public function Notify() { foreach ($this->command as $cm) { $cm->ExcuteCommand(); } }}/** * Barbecuer 烤串者 * * @package * @version $id$ * @copyright - yjj * @author YJJ * @license PHP Version 5.2.6 {@link /} */class Barbecuer { public function BakeMutton() { echo '烤羊肉串!'; } public function BakeChickenWing() { echo '烤鸡翅!'; }}/* * 敏捷开发原则告诉我们,不要为代码添加基于猜测的、实际不需要的功能。如果不清楚一个系统是否需要命令模式, * 一般就不要急着去实现它,事实上,在需要的时候通过重构实现这个模式并不困难,只有在真正需要如撤销/恢复操 * 作等功能时,把原来的代码重构为命令模式才有意义。 */$boy = new Barbecuer();$bakeMuttonCommand1 = new BakeMuttonCommand($boy);$bakeMuttonCommand2 = new BakeMuttonCommand($boy);$bakeChickenWingCommand1 = new BakeChickenWingCommand($boy);$waiter_girl = new Waiter();$waiter_girl->SetOrder($bakeMuttonCommand1);$waiter_girl->SetOrder($bakeMuttonCommand2);$waiter_girl->SetOrder($bakeChickenWingCommand1, '烤鸡翅没有了');$waiter_girl->Notify();

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。