• php实现设计模式之 命令模式


    <?php 
    /*
     * 命令模式:(行为模式)将一个请求封装成一个对象(命令封装成对象),从而可以使用不同的请求对客户参数化(客户的不同请求,调不同的封装对象),
     * 对请求排序,或者记录请求日志,以及支持可取消的操作
     * 
     1 命令接口:声明执行方法
     2 发起者 : 记录、撤销请求,请求命令执行
     3 接受者 : 命令的具体实现角色。
     4 具体命令: 包含接受者,调用接受者执行。
     */
    
    
    //具体做事情的角色,接受者
    class Receiver{
    	public $name;
    	
    	public function __construct($name){
    		$this->name = $name;
    		
    	}
    	
    	public function action(){
    		echo $this->name.'跳大';
    	}
    	
    	public function action1(){
    		echo $this->name.'防御';
    	}
    	
    	public function action2(){
    		echo $this->name.'治疗';
    	}
    }
    
    
    //命令接口
    interface Command{
    	public function execute();
    }
    
    //具体的三个命令,包含一个接受者,调用接受者去做
    class Command1 implements Command{
    	public $receiver;
    	
    	public function __construct($receiver){
    		$this->receiver = $receiver;
    	}
    	
    	public function execute(){
    		$this->receiver->action();
    	}
    }
    
    
    class Command2 implements Command{
    	public $receiver;
    	
    	public function __construct($receiver){
    		$this->receiver = $receiver;
    	}
    	
    	public function execute(){
    		$this->receiver->action1();
    	}
    }
    
    class Command3 implements Command{
    	public $receiver;
    	
    	public function __construct($receiver){
    		$this->receiver = $receiver;
    	}
    	
    	public function execute(){
    		$this->receiver->action2();
    	}
    }
    
    //命令发起者,记录,删除命令,请求执行命令
    class Invoker{
    	public $command = array();
    	
    	public function setCommand($command){
    		$this->command[] = $command;
    	}
    	
    	public function executeCommand(){//请求执行
    		foreach ($this->command as $key=>$value){
    			$value->execute();
    			echo "<br/>";
    		}
    	}
    	public function removeCommand($command){
    		$key = array_search($command, $this->command);
    		if($key!==false){
    			unset($this->command[$key]);
    		}
    	}
    }
    
    
    
    
    /*
     * 请求流程:先实例化接受者(具体做事的角色),然后实例化命令。
     * 接着实例化一个请求者,请求者注册命令,请求执行命令
     */
    $role1 = new Receiver('盖伦');
    $role2 = new Receiver('皇子');
    
    $command1 = new Command1($role2);
    $command2 = new Command2($role1);
    
    $invoker = new Invoker();
    $invoker->setCommand($command1);
    $invoker->setCommand($command2);
    
    $invoker->executeCommand();
    ?>
    

      

  • 相关阅读:
    对于学习 ionic的同学安装的时候肯定很痛苦 get 一个小技巧
    关于Android sdk有事安装出现报Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml错误的问题 只要两部就可以搞定
    很多同学工作了,这里呢简单说说工作中吧可能会遇到的一些事情‘
    css定位机制
    HBuilder简单操作
    前端学习方法小结
    Ajax基础讲解 1
    css hack
    jQuery自定义滚动条样式插件mCustomScrollbar 兼容IE7的方法
    ie下面兼容性问题的一些总结(转)
  • 原文地址:https://www.cnblogs.com/taijun/p/4078402.html
Copyright © 2020-2023  润新知