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

    <?php
    /** 
     * Created by PhpStorm. 
     * User: Jang 
     * Date: 2015/6/11 
     * Time: 10:16 
     */  
      
    //申请Model  
    class Request  
    {  
        //数量  
        public $num;  
        //申请类型  
        public $requestType;  
        //申请内容  
        public $requestContent;  
    }  
      
    //抽象管理者  
    abstract class Manager  
    {  
        protected $name;  
        //管理者上级  
        protected $manager;  
        public function __construct($_name)  
        {  
            $this->name = $_name;  
        }  
      
        //设置管理者上级  
        public function SetHeader(Manager $_mana)  
        {  
            $this->manager = $_mana;  
        }  
      
        //申请请求  
        abstract public function Apply(Request $_req);  
      
    }  
      
    //经理  
    class CommonManager extends Manager  
    {  
        public function __construct($_name)  
        {  
            parent::__construct($_name);  
        }  
        public function Apply(Request $_req)  
        {  
            if($_req->requestType=="请假" && $_req->num<=2)  
            {  
                echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}被批准。<br/>";  
            }  
            else  
            {  
                if(isset($this->manager))  
                {  
                    $this->manager->Apply($_req);  
                }  
            }  
      
        }  
    }  
      
    //总监  
    class MajorDomo extends Manager  
    {  
        public function __construct($_name)  
        {  
            parent::__construct($_name);  
        }  
      
        public function Apply(Request $_req)  
        {  
            if ($_req->requestType == "请假" && $_req->num <= 5)  
            {  
                echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}被批准。<br/>";  
            }  
            else  
            {  
                if (isset($this->manager))  
                {  
                    $this->manager->Apply($_req);  
                }  
            }  
      
        }  
    }  
      
      
    //总经理  
    class GeneralManager extends Manager  
    {  
        public function __construct($_name)  
        {  
            parent::__construct($_name);  
        }  
      
        public function Apply(Request $_req)  
        {  
            if ($_req->requestType == "请假")  
            {  
                echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}被批准。<br/>";  
            }  
            else if($_req->requestType=="加薪" && $_req->num <= 500)  
            {  
                echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}被批准。<br/>";  
            }  
            else if($_req->requestType=="加薪" && $_req->num>500)  
            {  
                echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}再说吧。<br/>";  
            }  
        }  
    }  

      职责链模式(又叫责任链模式)包含了一些命令对象和一些处理对象,每个处理对象决定它能处理那些命令对象,它也知道应该把自己不能处理的命令对象交下一个处理对象,该模式还描述了往该链添加新的处理对象的方法。

      适用场景:          

              1、有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。

              2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。

             3、可动态指定一组对象处理请求。

  • 相关阅读:
    软件工程师的悲哀
    关于ControlTemplate 2
    DataTemplate总结2(学习)
    ObjectiveC——类
    6 Popular Ideas That Fail
    Develop Cross Platform Mobile App
    DP 与 DO(学习)
    Titanium颜色总结
    Illustrator Tips
    Titanium API
  • 原文地址:https://www.cnblogs.com/long613/p/7682584.html
Copyright © 2011-2022 走看看