• 读《深入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();
    ?>




  • 相关阅读:
    log4j日志输出级别(转)
    spring-framework——hao123
    gradle配置国内镜像
    项目启动控制台严重: Error listenerStart问题定位
    Pycharm按键失灵
    Mixed Content混合内容错误 Iframe Http页面无法访问
    RSA加密公钥系数获取结果多00
    xml报文标签替换正则表达式
    AES采用CBC模式128bit加密工具类
    js进行MD5加密(含中文),与后台JAVA加密之后结果不同(解决)
  • 原文地址:https://www.cnblogs.com/red-code/p/5288637.html
Copyright © 2020-2023  润新知