php設(shè)計模式之職責(zé)鏈模式定義與用法經(jīng)典示例
本文實例講述了php設(shè)計模式之職責(zé)鏈模式定義與用法。分享給大家供大家參考,具體如下:
<?php /** * @desc php設(shè)計模式之職責(zé)鏈模式(責(zé)任鏈模式) 定義:顧名思義,責(zé)任鏈模式為請求創(chuàng)建了一個接收者對象的鏈。這種模式給予請求的類型,對請求的發(fā)送者和接收者進行解耦。這種類型的設(shè)計模式屬于行為型模式。 在這種模式中,通常每個接收者都包含對另一個接收者的引用。如果一個對象不能處理該請求,那么它會把相同的請求傳給下一個接收者,依此類推。 * 模擬公司請假流程,實現(xiàn)職責(zé)鏈模式 * 項目主管:有1天的批假權(quán)限 * 項目經(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); } //項目經(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}你的請假已批準,審批天數(shù){$staff->days},審核人項目主管:{$this->name}".PHP_EOL; }else{ $this->manager->apply($staff); } } } /** * @desc 項目經(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}你的請假已批準,審批天數(shù){$staff->days},審核人項目經(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}你的請假已批準,審批天數(shù){$staff->days},審核人ceo:{$this->name}".PHP_EOL; }else{ echo "{$staff->department}的{$staff->name}你的請假天數(shù)過長,未批準,審批人ceo:{$this->name}".PHP_EOL; } } } //實例化管理者類 $manager = new charge("尹志平"); $projectManager = new projectManager("令狐沖"); $boss = new boss("風(fēng)清揚"); //設(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é)束 * **/ /*運行結(jié)果 技術(shù)部的劉德華你的請假已批準,審批天數(shù)1,審核人項目主管:尹志平 技術(shù)部的周潤發(fā)你的請假已批準,審批天數(shù)2,審核人項目經(jīng)理:令狐沖 技術(shù)部的張學(xué)友你的請假已批準,審批天數(shù)5,審核人ceo:風(fēng)清揚 技術(shù)部的劉亦菲你的請假天數(shù)過長,未批準,審批人ceo:風(fēng)清揚 */
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
- PHP設(shè)計模式之裝飾者模式代碼實例
- PHP設(shè)計模式之裝飾者模式
- php設(shè)計模式 Decorator(裝飾模式)
- 學(xué)習(xí)php設(shè)計模式 php實現(xiàn)裝飾器模式(decorator)
- PHP面向?qū)ο蟪绦蛟O(shè)計組合模式與裝飾模式詳解
- PHP設(shè)計模式之裝飾器模式定義與用法詳解
- php適配器模式簡單應(yīng)用示例
- php橋接模式應(yīng)用案例分析
- php 策略模式原理與應(yīng)用深入理解
- php設(shè)計模式之工廠模式用法經(jīng)典實例分析
- php設(shè)計模式之觀察者模式定義與用法經(jīng)典示例
- php裝飾者模式簡單應(yīng)用案例分析
相關(guān)文章
Zend Framework教程之Zend_Db_Table_Row用法實例分析
這篇文章主要介紹了Zend Framework教程之Zend_Db_Table_Row用法,詳細講述了Zend_Db_Table_Row的功能,并結(jié)合實例形式詳細分析了Zend_Db_Table_Row操作數(shù)據(jù)的相關(guān)技巧,需要的朋友可以參考下2016-03-03基于thinkPHP實現(xiàn)的微信自定義分享功能示例
這篇文章主要介紹了基于thinkPHP實現(xiàn)的微信自定義分享功能,結(jié)合實例形式分析了thinkPHP調(diào)用微信接口實現(xiàn)自定義分享功能的相關(guān)操作技巧,需要的朋友可以參考下2016-09-09Thinkphp5.0 框架的請求方式與響應(yīng)方式分析
這篇文章主要介紹了Thinkphp5.0 框架的請求方式與響應(yīng)方式,結(jié)合實例形式分析了thinkPHP5常見的請求方式與響應(yīng)方式實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下2019-10-10詳解laravel passport OAuth2.0的4種模式
這篇文章主要介紹了laravel passport OAuth2.0的4種模式,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-11-11