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

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

    <?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. }  
  • 相关阅读:
    Firemonkey 控件设定字型属性及颜色
    ListView 使用 LiveBindings 显示超过 200 条记录
    Firemonkey ListView 获取项目右方「>」(Accessory) 事件
    XE7 Update 1 选 iOS 8.1 SDK 发布 iPhone 3GS 实机测试
    Firemonkey Bitmap 设定像素颜色 Pixel
    Firemonkey 移动平台 Form 显示使用 ShowModal 范例
    XE7 提交 App(iOS 8)提示「does not contain the correct beta entitlement」问题修复
    XE7 Android 中使用 MessageDlg 范例
    导出 XE6 预设 Android Style (*.style) 档案
    修正 Memo 設定為 ReadOnly 後, 無法有複製的功能
  • 原文地址:https://www.cnblogs.com/paulversion/p/8482880.html
Copyright © 2011-2022 走看看