• 责任链模式


    <?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、可动态指定一组对象处理请求。

  • 相关阅读:
    在Win7 x64环境中将World Wind Java SDK 2.1.0嵌入到Eclipse中的方法
    WW中文地名标注:输出*.wwp和*.wpl文件
    [转]Microsoft Robotics Studio:微软仿真机器人集成开发环境,简称MSRS
    C#中定义类时关于CLSCompliant属性的声明
    Android Studio中使用Java+OpenGL ES创建Android项目
    [转]使用Unity进行3D开发的思路和主要技术优势
    在C++中实现委托事件的方法
    VS2008新建MFC程序时提示:当前页面的脚本发送错误 不是有效的Win32应用程序的解决办法
    [Web 前端] mockjs让前端开发独立于后端
    [Web 前端] 如何构建React+Mobx+Superagent的完整框架
  • 原文地址:https://www.cnblogs.com/long613/p/7682584.html
Copyright © 2020-2023  润新知