您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何在php中定義職責(zé)鏈模式,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
具體如下:
<?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ù)過長(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í)別傳遞直到審核通過結(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ù)過長(zhǎng),未批準(zhǔn),審批人ceo:風(fēng)清揚(yáng) */
php,一個(gè)嵌套的縮寫名稱,是英文超級(jí)文本預(yù)處理語(yǔ)言(PHP:Hypertext Preprocessor)的縮寫。PHP 是一種 HTML 內(nèi)嵌式的語(yǔ)言,PHP與微軟的ASP頗有幾分相似,都是一種在服務(wù)器端執(zhí)行的嵌入HTML文檔的腳本語(yǔ)言,語(yǔ)言的風(fēng)格有類似于C語(yǔ)言,現(xiàn)在被很多的網(wǎng)站編程人員廣泛的運(yùn)用。
關(guān)于如何在php中定義職責(zé)鏈模式就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。