• 职责链模式


    职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

    <?php

    /**

     * Created by PhpStorm.

     * User: Administrator

     * Date: 2018/2/28

     * Time: 11:37

     */

    namespace frontendmodels;

    class Request

    {

        //数量

        public  $num;

        //申请类型

        public  $requestType;

        //申请内容

        public $requestContent;

    }

    <?php

    /**

     * Created by PhpStorm.

     * User: Administrator

     * Date: 2018/2/28

     * Time: 11:39

     */

    namespace frontendmodels;

    //抽象管理者

    abstract class Manager

    {

        protected  $name;

        //管理者上级

        protected  $manager;

        public  function __construct($name)

        {

            $this->name = $name;

        }

        //设置管理者上级

        public  function setHeader($manager){

            $this->manager = $manager;

        }

        abstract  public  function Apply(Request $request);

    }

    <?php

    /**

     * Created by PhpStorm.

     * User: Administrator

     * Date: 2018/2/28

     * Time: 11:46

     */

    namespace frontendmodels;

    class CommonManager extends Manager

    {

        public function __construct($name)

        {

            parent::__construct($name);

        }

        public function Apply(Request $request)

        {

            if ($request->requestType == '请假' && $request->num < 2){

                echo "{$this->name}:{$request->requestContent} 数量{$request->num}被批准。<br/>";

            }else{

                if(isset($this->manager)){

                    $this->manager->Apply($request);

                }

            }

        }

    }

    <?php

    /**

     * Created by PhpStorm.

     * User: Administrator

     * Date: 2018/2/28

     * Time: 11:51

     */

    namespace frontendmodels;

    class MajorDomo extends Manager

    {

        public function __construct($name)

        {

            parent::__construct($name);

        }

        public function Apply(Request $request)

        {

            if ($request->requestType == '请假' && $request->num <= 5){

                echo "{$this->name}:{$request->requestContent} 数量{$request->num}被批准。<br/>";

            }else{

                if(isset($this->manager)){

                    $this->manager->Apply($request);

                }

            }

        }

    }

    <?php

    /**

     * Created by PhpStorm.

     * User: Administrator

     * Date: 2018/2/28

     * Time: 11:52

     */

    namespace frontendmodels;

    class GeneralManager extends Manager

    {

        public function __construct($name)

        {

            parent::__construct($name);

        }

        public function Apply(Request $request)

        {

            if ($request->requestType == "请假")

            {

                echo "{$this->name}:{$request->requestContent} 数量{$request->num}被批准。<br/>";

            }

            else if($request->requestType=="加薪" && $request->num <= 500)

            {

                echo "{$this->name}:{$request->requestContent} 数量{$request->num}被批准。<br/>";

            }

            else if($request->requestType=="加薪" && $request->num>500)

            {

                echo "{$this->name}:{$request->requestContent} 数量{$request->num}再说吧。<br/>";

            }

        }

    }

     $jingli = new CommonManager("李经理");

            $zongjian = new MajorDomo("郭总监");

            $zongjingli = new GeneralManager("孙总");

            //设置直接上级

            $jingli->SetHeader($zongjian);

            $zongjian->SetHeader($zongjingli);

    //申请

            $req1 = new Request();

            $req1->requestType = "请假";

            $req1->requestContent = "小菜请假!";

            $req1->num = 1;

            $jingli->Apply($req1);

            $req2 = new Request();

            $req2->requestType = "请假";

            $req2->requestContent = "小菜请假!";

            $req2->num = 4;

            $jingli->Apply($req2);

            $req3 = new Request();

            $req3->requestType = "加薪";

            $req3->requestContent = "小菜请求加薪!";

            $req3->num = 500;

            $jingli->Apply($req3);

            $req4 = new Request();

            $req4->requestType = "加薪";

            $req4->requestContent = "小菜请求加薪!";

            $req4->num = 1000;

            $jingli->Apply($req4);

    1. <?php  
    2. /** 
    3.  * Created by PhpStorm. 
    4.  * User: Jang 
    5.  * Date: 2015/6/11 
    6.  * Time: 10:16 
    7.  */  
    8.   
    9. //申请Model  
    10. class Request  
    11. {  
    12.     //数量  
    13.     public $num;  
    14.     //申请类型  
    15.     public $requestType;  
    16.     //申请内容  
    17.     public $requestContent;  
    18. }  
    19.   
    20. //抽象管理者  
    21. abstract class Manager  
    22. {  
    23.     protected $name;  
    24.     //管理者上级  
    25.     protected $manager;  
    26.     public function __construct($_name)  
    27.     {  
    28.         $this->name = $_name;  
    29.     }  
    30.   
    31.     //设置管理者上级  
    32.     public function SetHeader(Manager $_mana)  
    33.     {  
    34.         $this->manager = $_mana;  
    35.     }  
    36.   
    37.     //申请请求  
    38.     abstract public function Apply(Request $_req);  
    39.   
    40. }  
    41.   
    42. //经理  
    43. class CommonManager extends Manager  
    44. {  
    45.     public function __construct($_name)  
    46.     {  
    47.         parent::__construct($_name);  
    48.     }  
    49.     public function Apply(Request $_req)  
    50.     {  
    51.         if($_req->requestType=="请假" && $_req->num<=2)  
    52.         {  
    53.             echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}被批准。<br/>";  
    54.         }  
    55.         else  
    56.         {  
    57.             if(isset($this->manager))  
    58.             {  
    59.                 $this->manager->Apply($_req);  
    60.             }  
    61.         }  
    62.   
    63.     }  
    64. }  
    65.   
    66. //总监  
    67. class MajorDomo extends Manager  
    68. {  
    69.     public function __construct($_name)  
    70.     {  
    71.         parent::__construct($_name);  
    72.     }  
    73.   
    74.     public function Apply(Request $_req)  
    75.     {  
    76.         if ($_req->requestType == "请假" && $_req->num <= 5)  
    77.         {  
    78.             echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}被批准。<br/>";  
    79.         }  
    80.         else  
    81.         {  
    82.             if (isset($this->manager))  
    83.             {  
    84.                 $this->manager->Apply($_req);  
    85.             }  
    86.         }  
    87.   
    88.     }  
    89. }  
    90.   
    91.   
    92. //总经理  
    93. class GeneralManager extends Manager  
    94. {  
    95.     public function __construct($_name)  
    96.     {  
    97.         parent::__construct($_name);  
    98.     }  
    99.   
    100.     public function Apply(Request $_req)  
    101.     {  
    102.         if ($_req->requestType == "请假")  
    103.         {  
    104.             echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}被批准。<br/>";  
    105.         }  
    106.         else if($_req->requestType=="加薪" && $_req->num <= 500)  
    107.         {  
    108.             echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}被批准。<br/>";  
    109.         }  
    110.         else if($_req->requestType=="加薪" && $_req->num>500)  
    111.         {  
    112.             echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}再说吧。<br/>";  
    113.         }  
    114.     }  
    115. }  
  • 相关阅读:
    前端切图:自制简易音乐播放器
    SEO那些事:一句代码一键分享网站
    POJ 2553 Tarjan
    POJ 2186 Tarjan
    POJ 1236 Tarjan算法
    POJ 1330 Tarjan LCA、ST表(其实可以数组模拟)
    POJ 1470 Tarjan算法
    POJ 1985 求树的直径 两边搜OR DP
    POJ 3687 拓扑排序
    POJ 3522 Kruskal
  • 原文地址:https://www.cnblogs.com/paulversion/p/8482880.html
Copyright © 2020-2023  润新知