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();
    ?>




  • 相关阅读:
    Tablespace 和 Datafile 关系
    SQL Server DBA常见面试 笔试问题
    查看log_buffer
    锁的查询及解锁
    ORACLE 锁机制
    查看oracle数据库是否归档和修改归档模式(转)
    Oracle kill session – 删除被死锁的会话
    滴水穿石python 学习笔记基础
    滴水穿石Java 生成PDF文件iText使用之入门
    滴水穿石IIS中的200K文件或者Request获取内容大小限制问题
  • 原文地址:https://www.cnblogs.com/red-code/p/5288637.html
Copyright © 2011-2022 走看看