主頁(yè) > 知識(shí)庫(kù) > php設(shè)計(jì)模式之職責(zé)鏈模式定義與用法經(jīng)典示例

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

熱門標(biāo)簽:外呼系統(tǒng)撥打暫時(shí)無(wú)法接通 怎么向銷售公司推銷外呼系統(tǒng) 長(zhǎng)春人工外呼系統(tǒng)服務(wù)商 仁和怎么申請(qǐng)400開頭的電話 廣東地市地圖標(biāo)注 廣州防封卡外呼系統(tǒng)多少錢一個(gè)月 江西手機(jī)自動(dòng)外呼防封系統(tǒng)是什么 高德地圖標(biāo)注家 哪里辦理400電話

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

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

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

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

您可能感興趣的文章:
  • PHP設(shè)計(jì)模式之裝飾者模式代碼實(shí)例
  • PHP設(shè)計(jì)模式之裝飾者模式
  • php設(shè)計(jì)模式 Decorator(裝飾模式)
  • 學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)裝飾器模式(decorator)
  • PHP面向?qū)ο蟪绦蛟O(shè)計(jì)組合模式與裝飾模式詳解
  • PHP設(shè)計(jì)模式之裝飾器模式定義與用法詳解
  • php適配器模式簡(jiǎn)單應(yīng)用示例
  • php橋接模式應(yīng)用案例分析
  • php 策略模式原理與應(yīng)用深入理解
  • php設(shè)計(jì)模式之工廠模式用法經(jīng)典實(shí)例分析
  • php設(shè)計(jì)模式之觀察者模式定義與用法經(jīng)典示例
  • php裝飾者模式簡(jiǎn)單應(yīng)用案例分析

標(biāo)簽:濮陽(yáng) 黔東 廈門 惠州 梅河口 湘西 文山 海北

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《php設(shè)計(jì)模式之職責(zé)鏈模式定義與用法經(jīng)典示例》,本文關(guān)鍵詞  php,設(shè)計(jì)模式,之,職責(zé),鏈,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《php設(shè)計(jì)模式之職責(zé)鏈模式定義與用法經(jīng)典示例》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于php設(shè)計(jì)模式之職責(zé)鏈模式定義與用法經(jīng)典示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章