zoukankan      html  css  js  c++  java
  • 责任链模式

    责任链模式:

    请求方发起请求,接收方接受请求,并解决请求方的问题,如果接收方不能解决问题,则将请求传给下一个接收方(上一级),让下一个接收方来解决问题,以此类推,发起请求方并不关心是谁解决了问题,只关心是否解决了问题。

    <?php  
    	class Admin{
    		public $top="";
    		public $level=0;
    		public function __construct(){ }
    
    		public function ToDo(){}
    
    		public function deal($level){
    			if($level <= $this->level){
    				//如果当前类能够解决问题,则直接让当前类解决,不用传递给上级
    				$this->ToDo();
    			} else {
    				//如果当前类的等级不够(不能解决问题),则将问题传递给上一级
    				//即生成一个上级类,然后调用上级类的方法来解决问题,层层深入,直到解决问题
    				//top属性初始为上级类名
    				//将新生成的上级类的实例化对象赋给top属性
    				$this->top= new $this->top;
    				$this->top->deal($level);
    			}
    		}
    	}
    
    	class PersonOne extends Admin{
    		public $level=1;
    		public $top="PersonTwo";
    		public function ToDo(){
    			echo "the problem has been solved by PersonOne
    ";
    		}
    	}
    
    	class PersonTwo extends Admin{
    		public $level=2;
    		public $top="PersonThree";
    		public function ToDo(){
    			echo "the problem has been solved by PersonTwo
    ";
    		}
    	}
    
    	class PersonThree extends Admin{
    		public $level=3;
    		public $top=__CLASS__;
    		public function ToDo(){
    			echo "the problem has been solved by PersonThree
    ";
    		}
    
    	}
    
    	$level=1;
    	$d=new PersonOne();
    	$d->deal($level);
    
    	$level=2;
    	$d=new PersonOne();
    	$d->deal($level);
    
    	$level=3;
    	$d=new PersonOne();
    	$d->deal($level);
    ?>
    

      参考 责任链 | 菜鸟教程  http://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html

  • 相关阅读:
    面试题
    学习Javascript闭包(Closure)
    git命令
    css3 3d翻转效果
    meta 如何写
    Java String equals和==的比较
    MySQL Explain详解
    MySQL explain,type分析(转)
    python的内存分析和处理
    python lambda的使用
  • 原文地址:https://www.cnblogs.com/-beyond/p/7746948.html
Copyright © 2011-2022 走看看