• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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:风清扬
    */
    
    

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • PHP设计模式之装饰者模式代码实例
    • PHP设计模式之装饰者模式
    • php设计模式 Decorator(装饰模式)
    • 学习php设计模式 php实现装饰器模式(decorator)
    • PHP面向对象程序设计组合模式与装饰模式详解
    • PHP设计模式之装饰器模式定义与用法详解
    • php适配器模式简单应用示例
    • php桥接模式应用案例分析
    • php 策略模式原理与应用深入理解
    • php设计模式之工厂模式用法经典实例分析
    • php设计模式之观察者模式定义与用法经典示例
    • php装饰者模式简单应用案例分析
    上一篇:php使用yield对性能提升的测试实例分析
    下一篇:php设计模式之观察者模式定义与用法经典示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

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