zoukankan      html  css  js  c++  java
  • 命令模式

    命令模式用一句话表示就是说:一个命令一个类。在面向对象程式设计的范畴中,命令模式是一种设计模式, 将一个请求封装为一个对象, 从而使你可用不同的请求对客户进行参
    数。

    class Factory {
    	
    	static public function getCommand($_action) {
    		$_className = $_action;	
    		$_classFile = $_action.'.class.php';
    		require $_classFile;
    		return new $_className();
    	}
    }
    
    class Controller {
    	private $_context;
    	
    	public function __construct() {
    		$this->_context = new Context();
    	}
    	
    	public function getContext() {
    		return $this->_context;
    	}
    	
    	public function process() {
    		$_cmd = Factory::getCommand($this->_context->getParam('action'));
    		if ($_cmd->execute($this->_context)) {
    			return $this->_context->getSucc();
    		} else {
    			return $this->_context->getError();
    		}
    	}
    }
    
    class Context {
    	private $_params = array();
    	private $_succ;
    	private $_error;
    	
    	public function addParam($_key, $_value) {
    		$this->_params[$_key] = $_value;
    	}
    	
    	public function getParam($_key) {
    		return $this->_params[$_key];
    	}
    	
    	public function setSucc($_info) {
    		$this->_succ = $_info;
    	}
    	
    	public function setError($_info) {
    		$this->_error = $_info;
    	}
    	
    	public function getSucc() {
    		return $this->_succ;
    	}
    	
    	public function getError() {
    		return $this->_error;
    	}
    	
    	
    }
    
    class Login {
    	private $_user = 'admin';
    	private $_pass = '123456';
    	
    	public function execute(Context $_context) {
    		if ($this->_user == $_context->getParam('user') && $this->_pass == $_context->getParam('pass')) {
    			return true;
    		}
    		return false;
    	}
    }
    
    class FeedBack {
    	
    	public function execute(Context $_context) {
    		if ($_context->getParam('name') && $_context->getParam('date') && $_context->getParam('info')) {
    			return true;
    		}
    		return false;
    	}
    }
    
    $_c = new Controller();
    $_context = $_c->getContext();
    $_context->addParam('action', 'Login');
    $_context->addParam('user', 'admin');
    $_context->addParam('pass', '123456');
    $_context->setSucc('登录成功!');
    $_context->setError('登录失败!');
    echo $_c->process();
    
    $_context->addParam('action', 'FeedBack');
    $_context->addParam('name', 'dddd');
    $_context->addParam('date', 'kkkk');
    $_context->addParam('info', 'eeee');
    $_context->setSucc('反馈成功!');
    $_context->setError('反馈失败!');
    echo $_c->process();
    

    命令模式的三个组成部分别为:
    1.实例化命令对象类:Factory.class.php (其实就是一个简单工厂)
    2.部署命令对象的调用者类:Controller.class.php (一个控制器,MVC 会涉及到)
    3.接收命令的接受者类:Context.class.php (一个模型,Model)

  • 相关阅读:
    Hadoop 2.7.1 源代码目录结构分析
    Jit
    java性能分析工具
    最近一个dish项目的建设思考
    mysql的ACID的理解
    实践中积累沟通组织经验
    系统性能--磁盘/网卡
    系统性能--CPU
    调停者模式的批斗
    channel和Stream的对比
  • 原文地址:https://www.cnblogs.com/jsmiao/p/4611699.html
Copyright © 2011-2022 走看看