php设计模式之职责链模式定义与用法经典示例
发布:smiling 来源: PHP粉丝网 添加日期:2021-12-19 12:40:39 浏览: 评论:0
这篇文章主要介绍了php设计模式之职责链模式定义与用法,结合完整实例形式详细分析了php职责链模式的概念、原理、定义与使用方法,注释中包含详细的说明,需要的朋友可以参考下。
本文实例讲述了php设计模式之职责链模式定义与用法,分享给大家供大家参考,具体如下:
- <?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:风清扬
- */
Tags: php设计模式 php链模式
相关文章
- ·php设计模式——单例模式(Singleton)的常见应用场景(2015-04-15)
- ·php 设计模式之单例模式例子(2016-07-27)
- ·PHP设计模式之:单例模式的学习笔记(2016-07-29)
- ·PHP设计模式之:注册模式入门教程(2016-07-29)
- ·PHP设计模式之:适配器模式入门教程(2016-07-29)
- ·PHP设计模式之:数据映射模式教程(2016-07-29)
- ·PHP设计模式之:观察者模式学习笔记(2016-07-29)
- ·PHP常用设计模式之委托设计模式(2021-07-09)
- ·php设计模式之委托模式(2021-07-09)
- ·PHP设计模式之观察者模式实例(2021-07-10)
- ·PHP设计模式之模板方法模式定义与用法详解(2021-09-06)
- ·PHP设计模式之状态模式定义与用法详解(2021-09-06)
- ·PHP设计模式之装饰器模式定义与用法详解(2021-09-06)
- ·PHP设计模式之适配器模式定义与用法详解(2021-09-06)
- ·PHP设计模式之原型模式定义与用法详解(2021-09-06)
- ·PHP设计模式之工厂模式定义与用法详解(2021-09-06)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)