zoukankan      html  css  js  c++  java
  • 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();
    ?>
    

      

  • 相关阅读:
    Java1:Chapter2
    Java1:Chapter1
    Java1:Chapter11
    Java1:Chapter8
    Java1:Chapter6
    Android day 03
    Android day02
    Android day01
    二进制文件的读写
    字符流
  • 原文地址:https://www.cnblogs.com/taijun/p/4078402.html
Copyright © 2011-2022 走看看