zoukankan      html  css  js  c++  java
  • 读《深入php面向对象、模式与实践》有感(三)

    命令模式:

    第一次接触到这个命令模式的时候,感觉它很像一个简化的mvc框架。从不同的路径访问,再由控制器来判断所要调用的具体php文件。



    <?php
    class CommandContext{   //"命令容器"
    private $params = array();
    function addParam($key,$val){
    $this->params[$key] = $val;
        }
    function getParam($key){
    return $this->params[$key];
        }
    }
    class Controller{
    private $cmdContext;
    function __construct(){
    $this->cmdContext = new CommandContext();
        }
    //
    function getCmdContext(){
    return $this->cmdContext;
        }
    function process(){
    $action = $this->cmdContext->getParam("action");   //通过命令容器获得命令
    $command = CommandFactory::getCommand($action);   //命令传给命令工厂,得到命令所对应的子command类对象
    if($command->execute($this->cmdContext)){//调用子类对象的execute方法并判断
    //成功
    //调用对应视图
    }else{
    //失败
    }
        }
    }
    class CommandFactory{
    static function getCommand($cmd){
    $file = 'commands/'.$cmd.'Command.php'; //命令所对应的php文件路径
    if(! file_exists($file)){
    throw new Exception("Could not find file $file");
            }
    require_once($file);
    $class = $cmd.'Command';    //形成类名
    if(! class_exists($class)){
    throw new Exception("Could not find class $class");
            }
    $result = new $class();
    return $result;
        }
    }
    //commands文件夹内
    abstract class Command{
    abstract function execute(CommandContext $commandContext);
    }
    class demoCommand extends Command{
    function execute(CommandContext $commandContext){
    return "ok";
        }
    }
    //使用代码
    $controller = new Controller();
    $cmdContext = $controller->getCmdContext();
    $cmdContext->addParam("action","demo");
    $demo = $controller->process();
    ?>




  • 相关阅读:
    Linux 下C语言 指针学习 二 (数组与指针)
    在VMware虚拟机下访问外网的方法
    网站性能优化
    SEO优化
    前端开发组织结构及文件命名
    自适应网页设计的方法
    c#实现microsoft账号登入授权(OAuth 2.0)并获取个人信息
    twitter 授权过程
    应用facebook .net sdk
    第三方账号登入
  • 原文地址:https://www.cnblogs.com/red-code/p/5288637.html
Copyright © 2011-2022 走看看