欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php設(shè)計(jì)模式之職責(zé)鏈模式定義與用法經(jīng)典示例

 更新時(shí)間:2019年09月19日 09:47:21   作者:巴八靈  
這篇文章主要介紹了php設(shè)計(jì)模式之職責(zé)鏈模式定義與用法,結(jié)合完整實(shí)例形式詳細(xì)分析了php職責(zé)鏈模式的概念、原理、定義與使用方法,注釋中包含詳細(xì)的說明,需要的朋友可以參考下

本文實(shí)例講述了php設(shè)計(jì)模式之職責(zé)鏈模式定義與用法。分享給大家供大家參考,具體如下:

<?php
/**
 * @desc php設(shè)計(jì)模式之職責(zé)鏈模式(責(zé)任鏈模式)
 定義:顧名思義,責(zé)任鏈模式為請求創(chuàng)建了一個接收者對象的鏈。這種模式給予請求的類型,對請求的發(fā)送者和接收者進(jìn)行解耦。這種類型的設(shè)計(jì)模式屬于行為型模式。
在這種模式中,通常每個接收者都包含對另一個接收者的引用。如果一個對象不能處理該請求,那么它會把相同的請求傳給下一個接收者,依此類推。
 * 模擬公司請假流程,實(shí)現(xiàn)職責(zé)鏈模式
 * 項(xiàng)目主管:有1天的批假權(quán)限
 * 項(xiàng)目經(jīng)理:有3天的批假權(quán)限
 * 公司老板:任性似的權(quán)限看心情
 * 此模式有兩個角色:1請求員工角色,2領(lǐng)導(dǎo)管理者角色
 * **/
//員工類
class staff{
  public $name;//員工姓名
  public $department;//部門名稱
  public $days;//請假天數(shù)
  public function __construct($name,$department,$days){
    $this->name = $name;
    $this->department = $department;
    $this->days = $days;
  }
}
//創(chuàng)建抽象管理者類
abstract class manager{
  public $manager;//設(shè)置管理者上級
  public function __construct($name){
    $this->name = $name;
  }
  //設(shè)置處理申請的上級管理對象
  public function setHeader(manager $manager){
    $this->manager = $manager;
  }
  //請假申請?zhí)幚矸椒?
  abstract public function apply(staff $staff);
}
//項(xiàng)目經(jīng)理請假申請?zhí)幚眍?
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}你的請假已批準(zhǔn),審批天數(shù){$staff->days},審核人項(xiàng)目主管:{$this->name}".PHP_EOL;
    }else{
      $this->manager->apply($staff);
    }
  }
}
/**
 * @desc 項(xiàng)目經(jīng)理審批類
 * **/
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}你的請假已批準(zhǔn),審批天數(shù){$staff->days},審核人項(xiàng)目經(jīng)理:{$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}你的請假已批準(zhǔn),審批天數(shù){$staff->days},審核人ceo:{$this->name}".PHP_EOL;
    }else{
      echo "{$staff->department}的{$staff->name}你的請假天數(shù)過長,未批準(zhǔn),審批人ceo:{$this->name}".PHP_EOL;
    }
  }
}
//實(shí)例化管理者類
$manager = new charge("尹志平");
$projectManager = new projectManager("令狐沖");
$boss = new boss("風(fēng)清揚(yáng)");
//設(shè)置管理類的上次管理對象實(shí)例
$manager->setHeader($projectManager);
$projectManager->setHeader($boss);
//申請請假1天
$staff = new staff('劉德華', '技術(shù)部', 1);
$manager->apply($staff);
//申請請假3天
$staff = new staff('周潤發(fā)', '技術(shù)部', 2);
$manager->apply($staff);
//申請請假5天
$staff = new staff('張學(xué)友', '技術(shù)部', 5);
$manager->apply($staff);
//申請請假7天
$staff = new staff('劉亦菲', '技術(shù)部', 7);
$manager->apply($staff);
/**
拿這個請假的案例通俗的理解就是:每次請假申請都是從最接近自己的領(lǐng)導(dǎo)開始,一層一層的往上遞,直到有人處理結(jié)束,更通俗的講就是你給我發(fā)一個請求,我如果
有處理權(quán)限就直接處理了,如果權(quán)限不足就往更上一級別傳遞直到審核通過結(jié)束
 * **/
/*運(yùn)行結(jié)果
技術(shù)部的劉德華你的請假已批準(zhǔn),審批天數(shù)1,審核人項(xiàng)目主管:尹志平
技術(shù)部的周潤發(fā)你的請假已批準(zhǔn),審批天數(shù)2,審核人項(xiàng)目經(jīng)理:令狐沖
技術(shù)部的張學(xué)友你的請假已批準(zhǔn),審批天數(shù)5,審核人ceo:風(fēng)清揚(yáng)
技術(shù)部的劉亦菲你的請假天數(shù)過長,未批準(zhǔn),審批人ceo:風(fēng)清揚(yáng)
*/

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總

希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • ThinkPHP處理Ajax返回的方法

    ThinkPHP處理Ajax返回的方法

    這篇文章主要介紹了ThinkPHP處理Ajax返回的方法,簡單講述了在ThinkPHP中Ajax的用法及對應(yīng)的處理Ajax返回值的方法,具有不錯的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-11-11
  • yii2 在控制器中驗(yàn)證請求參數(shù)的使用方法

    yii2 在控制器中驗(yàn)證請求參數(shù)的使用方法

    這篇文章主要介紹了yii2 在控制器中驗(yàn)證請求參數(shù)的使用方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Yii框架分頁實(shí)現(xiàn)方法詳解

    Yii框架分頁實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了Yii框架分頁實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了基于Yii框架實(shí)現(xiàn)分頁的原理、步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • Zend Framework教程之Zend_Db_Table_Row用法實(shí)例分析

    Zend Framework教程之Zend_Db_Table_Row用法實(shí)例分析

    這篇文章主要介紹了Zend Framework教程之Zend_Db_Table_Row用法,詳細(xì)講述了Zend_Db_Table_Row的功能,并結(jié)合實(shí)例形式詳細(xì)分析了Zend_Db_Table_Row操作數(shù)據(jù)的相關(guān)技巧,需要的朋友可以參考下
    2016-03-03
  • LNMP部署laravel以及xhprof安裝使用教程

    LNMP部署laravel以及xhprof安裝使用教程

    這篇文章主要介紹了關(guān)于在LNMP上部署laravel以及xhprof安裝使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • php高清晰度無損圖片壓縮功能的實(shí)現(xiàn)代碼

    php高清晰度無損圖片壓縮功能的實(shí)現(xiàn)代碼

     經(jīng)常會用到把上傳的大圖片壓縮,特別是體積,在微信等APP應(yīng)用上,也默認(rèn)都是有壓縮的,那么,怎么樣對圖片大幅度壓縮卻仍能保持較高的清晰度呢?接下來通過本文給大家分享php高清晰度無損圖片壓縮功能,感興趣的朋友一起看看吧
    2018-12-12
  • ThinkPHP3.2框架自定義配置和加載用法示例

    ThinkPHP3.2框架自定義配置和加載用法示例

    這篇文章主要介紹了ThinkPHP3.2框架自定義配置和加載用法,結(jié)合實(shí)例形式分析了thinkPHP3.2框架使用自定義配置保存預(yù)定義數(shù)組數(shù)據(jù)相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • 基于thinkPHP實(shí)現(xiàn)的微信自定義分享功能示例

    基于thinkPHP實(shí)現(xiàn)的微信自定義分享功能示例

    這篇文章主要介紹了基于thinkPHP實(shí)現(xiàn)的微信自定義分享功能,結(jié)合實(shí)例形式分析了thinkPHP調(diào)用微信接口實(shí)現(xiàn)自定義分享功能的相關(guān)操作技巧,需要的朋友可以參考下
    2016-09-09
  • Thinkphp5.0 框架的請求方式與響應(yīng)方式分析

    Thinkphp5.0 框架的請求方式與響應(yīng)方式分析

    這篇文章主要介紹了Thinkphp5.0 框架的請求方式與響應(yīng)方式,結(jié)合實(shí)例形式分析了thinkPHP5常見的請求方式與響應(yīng)方式實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • 詳解laravel passport OAuth2.0的4種模式

    詳解laravel passport OAuth2.0的4種模式

    這篇文章主要介紹了laravel passport OAuth2.0的4種模式,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評論