《PHP實戰:簡單介紹PHP的責任鏈編程模式》要點:
本文介紹了PHP實戰:簡單介紹PHP的責任鏈編程模式,希望對您有用。如果有疑問,可以聯系我們。
概述
責任鏈模式是一種對象的行為模式.在責任鏈模式里,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈.哀求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此哀求.發出這個哀求的客戶端并不知道鏈上的哪一個對象最終處理這個哀求,這使得系統可以在不影響客戶端的情況下動態的重新組織和分配責任PHP實例
責任鏈模式的定義
使多個對象都有機會處理哀求,從而避免了哀求的發送者和接受者之間耦合關系,將這些對象連成一條鏈,并沿著這條鏈傳遞該哀求,直到有對象處理它為止.
?
責任鏈模式的優點
最為顯著的優點就是將哀求和處理分開.哀求者可以不用知道是誰處理的,處理者可以不用知道哀求的全貌,兩者解耦,提高系統的靈活性.
??
責任鏈模式的缺點
一是性能問題,每個哀求都是從鏈頭遍歷到鏈尾,特別是在鏈比較長的時候,性能是一個問題.二是調試不是很方便,特別是鏈條比較長的,環節比較多的時候,由于采用了類似遞歸的方式 ,調試的時候邏輯可能比較復雜.PHP實例
責任鏈模式涉及到的角色如下:PHP實例
??? 抽象處理者(Handler)角色:定義出一個處理哀求的接口.如果需要,接口可以定義出一個方法以設定和返回對下家的引用.這個角色通常由一個php的抽象類或接口實現.上圖中Handler類的聚合關系給出了具體子類對下家的引用,抽象方法handleRequest()規范了子類處理哀求的操作
??? 具體處理者(ConcreateHandle)角色:具體處理者接到哀求后,可以選擇將哀求處理掉,或者將哀求傳給下家.由于具體處理者持有對下家的引用,因此,如果需要,具體處理這可以訪問下家PHP實例
來看一個PHP的責任鏈模式編程實例:
?PHP實例
<?php /** * 抽象處理者角色 * @author wzy * */ abstract class Handle { /** * 持有后繼的責任對象 * * @var object */ protected $successor; /** * 示意處理哀求的方法,雖然這個示意方法是沒有傳入參素的 * 但實際是可以傳入參數的,根據具體需要來選擇是否傳遞參數 */ public abstract function handleRequest (); /** * 取值方法 * * @return object */ public function getSuccessor () { return $this->successor; } /** * 賦值方法,設置后繼的責任對象 * * @param object $objsuccessor */ public function setSuccessor ($objsuccessor) { $this->successor = $objsuccessor; } } /** * 具體處理者角色 * * @author wzy * */ class ConcreateHandler extends Handle { /** * 判斷是否有后繼的責任對象 * 如果有,就轉發哀求給后繼的責任對象 * 如果沒有,則處理哀求 * * @see Handle::handleRequest() */ public function handleRequest () { if ($this->getSuccessor() != null) { echo "放過哀求,將哀求轉發給后繼的責任對象!<br>"; $this->getSuccessor()->handleRequest(); } else { echo "處理哀求,處理過程省略...<br>"; } } } /** * 客戶端代碼 */ // 組裝責任鏈 $handle1 = new ConcreateHandler(); $handle2 = new ConcreateHandler(); $handle1->setSuccessor($handle2); // 提交哀求 $handle1->handleRequest(); ?>
通過代碼可以看出,客戶端創建了兩個處理者對象,并指定第一個處理者對象的下家是第二個處理者對象,而第二個處理者對象卻沒有下家.然后客戶端將哀求傳遞給第一個處理者對象
PHP實例
《PHP實戰:簡單介紹PHP的責任鏈編程模式》是否對您有啟發,歡迎查看更多與《PHP實戰:簡單介紹PHP的責任鏈編程模式》相關教程,學精學透。維易PHP學院為您提供精彩教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/8804.html