当前位置:编程学习 > > 正文

常见的php五大运行模式详解(php设计模式之职责链模式定义与用法经典示例)

时间:2021-10-19 06:04:58类别:编程学习

常见的php五大运行模式详解

php设计模式之职责链模式定义与用法经典示例

本文实例讲述了php设计模式之职责链模式定义与用法。分享给大家供大家参考,具体如下:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • <?php
  • /**
  •  * @desc php设计模式之职责链模式(责任链模式)
  •  定义:顾名思义,责任链模式为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。
  • 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
  •  * 模拟公司请假流程,实现职责链模式
  •  * 项目主管:有1天的批假权限
  •  * 项目经理:有3天的批假权限
  •  * 公司老板:任性似的权限看心情
  •  * 此模式有两个角色:1请求员工角色,2领导管理者角色
  •  * **/
  • //员工类
  • class staff{
  •   public $name;//员工姓名
  •   public $department;//部门名称
  •   public $days;//请假天数
  •   public function __construct($name,$department,$days){
  •     $this->name = $name;
  •     $this->department = $department;
  •     $this->days = $days;
  •   }
  • }
  • //创建抽象管理者类
  • abstract class manager{
  •   public $manager;//设置管理者上级
  •   public function __construct($name){
  •     $this->name = $name;
  •   }
  •   //设置处理申请的上级管理对象
  •   public function setHeader(manager $manager){
  •     $this->manager = $manager;
  •   }
  •   //请假申请处理方法
  •   abstract public function apply(staff $staff);
  • }
  • //项目经理请假申请处理类
  • class charge extends manager{
  •   public $name;//管理者姓名
  •   public function __construct($name){
  •     parent::__construct($name);
  •   }
  •   /**
  •    * @desc 审批请假
  •    * **/
  •   public function apply(staff $staff){
  •     if($staff->days<=1){
  •       echo "{$staff->department}的{$staff->name}你的请假已批准,审批天数{$staff->days},审核人项目主管:{$this->name}".PHP_EOL;
  •     }else{
  •       $this->manager->apply($staff);
  •     }
  •   }
  • }
  • /**
  •  * @desc 项目经理审批类
  •  * **/
  • class projectManager extends manager{
  •   public function __construct($name){
  •     parent::__construct($name);
  •   }
  •   /**
  •    * @desc 审批请假
  •    * **/
  •   public function apply(staff $staff){
  •     if($staff->days<=3){
  •       echo "{$staff->department}的{$staff->name}你的请假已批准,审批天数{$staff->days},审核人项目经理:{$this->name}".PHP_EOL;
  •     }else{
  •       $this->manager->apply($staff);
  •     }
  •   }
  • }
  • /**
  •  * @desc 老板审批类
  •  * **/
  • class boss extends manager{
  •   public function __construct($name){
  •     parent::__construct($name);
  •   }
  •   /**
  •    * @desc 审批请假
  •    * **/
  •   public function apply(staff $staff){
  •     if($staff->days>3 && $staff->days<=5 ){
  •       echo "{$staff->department}的{$staff->name}你的请假已批准,审批天数{$staff->days},审核人ceo:{$this->name}".PHP_EOL;
  •     }else{
  •       echo "{$staff->department}的{$staff->name}你的请假天数过长,未批准,审批人ceo:{$this->name}".PHP_EOL;
  •     }
  •   }
  • }
  • //实例化管理者类
  • $manager = new charge("尹志平");
  • $projectManager = new projectManager("令狐冲");
  • $boss = new boss("风清扬");
  • //设置管理类的上次管理对象实例
  • $manager->setHeader($projectManager);
  • $projectManager->setHeader($boss);
  • //申请请假1天
  • $staff = new staff('刘德华', '技术部', 1);
  • $manager->apply($staff);
  • //申请请假3天
  • $staff = new staff('周润发', '技术部', 2);
  • $manager->apply($staff);
  • //申请请假5天
  • $staff = new staff('张学友', '技术部', 5);
  • $manager->apply($staff);
  • //申请请假7天
  • $staff = new staff('刘亦菲', '技术部', 7);
  • $manager->apply($staff);
  • /**
  • 拿这个请假的案例通俗的理解就是:每次请假申请都是从最接近自己的领导开始,一层一层的往上递,直到有人处理结束,更通俗的讲就是你给我发一个请求,我如果
  • 有处理权限就直接处理了,如果权限不足就往更上一级别传递直到审核通过结束
  •  * **/
  • /*运行结果
  • 技术部的刘德华你的请假已批准,审批天数1,审核人项目主管:尹志平
  • 技术部的周润发你的请假已批准,审批天数2,审核人项目经理:令狐冲
  • 技术部的张学友你的请假已批准,审批天数5,审核人ceo:风清扬
  • 技术部的刘亦菲你的请假天数过长,未批准,审批人ceo:风清扬
  • */
  • 希望本文所述对大家PHP程序设计有所帮助。

    原文链接:https://www.cnblogs.com/lisqiong/p/9619276.html

    上一篇下一篇

    猜您喜欢

    热门推荐