职责链模式 - 设计模式 - PHP版

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了职责链模式 - 设计模式 - PHP版相关的知识,希望对你有一定的参考价值。

  1 <?php
  2 /*
  3  * 职责链模式
  4  * 
  5  * 参考:http://blog.csdn.net/jhq0113/article/details/46454419
  6  * 
  7  */
  8 //申请Model  
  9 class Request {
 10     //数量  
 11     public $num;
 12     //申请类型  
 13     public $requestType;
 14     //申请内容  
 15     public $requestContent;
 16 }
 17 //抽象管理者  
 18 abstract class Manager {
 19     protected $name;
 20     //管理者上级  
 21     protected $manager;
 22     public function __construct($_name) {
 23         $this->name = $_name;
 24     }
 25     //设置管理者上级  
 26     public function SetHeader(Manager $_mana) {
 27         $this->manager = $_mana;
 28     }
 29     //申请请求  
 30     abstract public function Apply(Request $_req);
 31 }
 32 //经理  
 33 class CommonManager extends Manager {
 34     public function __construct($_name) {
 35         parent::__construct($_name);
 36     }
 37     public function Apply(Request $_req) {
 38         if ($_req->requestType == "请假" && $_req->num <= 2) {
 39             echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}被批准。<br/>";
 40         } else {
 41             if (isset($this->manager)) {
 42                 $this->manager->Apply($_req);
 43             }
 44         }
 45     }
 46 }
 47 //总监  
 48 class MajorDomo extends Manager {
 49     public function __construct($_name) {
 50         parent::__construct($_name);
 51     }
 52     public function Apply(Request $_req) {
 53         if ($_req->requestType == "请假" && $_req->num <= 5) {
 54             echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}被批准。<br/>";
 55         } else {
 56             if (isset($this->manager)) {
 57                 $this->manager->Apply($_req);
 58             }
 59         }
 60     }
 61 }
 62 //总经理  
 63 class GeneralManager extends Manager {
 64     public function __construct($_name) {
 65         parent::__construct($_name);
 66     }
 67     public function Apply(Request $_req) {
 68         if ($_req->requestType == "请假") {
 69             echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}被批准。<br/>";
 70         } else if ($_req->requestType == "加薪" && $_req->num <= 500) {
 71             echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}被批准。<br/>";
 72         } else if ($_req->requestType == "加薪" && $_req->num > 500) {
 73             echo "{$this->name}:{$_req->requestContent} 数量{$_req->num}再说吧。<br/>";
 74         }
 75     }
 76 }
 77 //--------------------客户端----------------------  
 78 $jingli = new CommonManager("李经理");
 79 $zongjian = new MajorDomo("郭总监");
 80 $zongjingli = new GeneralManager("孙总");
 81 //设置直接上级  
 82 $jingli->SetHeader($zongjian);
 83 $zongjian->SetHeader($zongjingli);
 84 //申请  
 85 $req1 = new Request();
 86 $req1->requestType = "请假";
 87 $req1->requestContent = "小菜请假!";
 88 $req1->num = 1;
 89 $jingli->Apply($req1);
 90 $req2 = new Request();
 91 $req2->requestType = "请假";
 92 $req2->requestContent = "小菜请假!";
 93 $req2->num = 4;
 94 $jingli->Apply($req2);
 95 $req3 = new Request();
 96 $req3->requestType = "加薪";
 97 $req3->requestContent = "小菜请求加薪!";
 98 $req3->num = 500;
 99 $jingli->Apply($req3);
100 $req4 = new Request();
101 $req4->requestType = "加薪";
102 $req4->requestContent = "小菜请求加薪!";
103 $req4->num = 1000;
104 $jingli->Apply($req4);

 

以上是关于职责链模式 - 设计模式 - PHP版的主要内容,如果未能解决你的问题,请参考以下文章

设计模式 职责链模式

职责链模式vs状态模式区别

设计模式 行为型模式 -- 职责链模式(JDK源码分析:FilterChain(过滤器))

JAVA设计模式大总结(二十三)--- b站尚硅谷设计模式之 职责链模式 图解 + 代码 整理(超详)

设计模式-(15)责任链模式 (swift版)

利用职责链模式分解If else