国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

簡單介紹PHP的責任鏈編程模式

2024-05-04 22:35:14
字體:
供稿:網(wǎng)友

概述
責任鏈模式是一種對象的行為模式。在責任鏈模式里,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。發(fā)出這個請求的客戶端并不知道鏈上的哪一個對象最終處理這個請求,這使得系統(tǒng)可以在不影響客戶端的情況下動態(tài)的重新組織和分配責任

責任鏈模式的定義
使多個對象都有機會處理請求,從而避免了請求的發(fā)送者和接受者之間耦合關(guān)系,將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有對象處理它為止。
 
責任鏈模式的優(yōu)點
最為顯著的優(yōu)點就是將請求和處理分開。請求者可以不用知道是誰處理的,處理者可以不用知道請求的全貌,兩者解耦,提高系統(tǒng)的靈活性。
  
責任鏈模式的缺點
一是性能問題,每個請求都是從鏈頭遍歷到鏈尾,特別是在鏈比較長的時候,性能是一個問題。二是調(diào)試不是很方便,特別是鏈條比較長的,環(huán)節(jié)比較多的時候,由于采用了類似遞歸的方式 ,調(diào)試的時候邏輯可能比較復雜。

責任鏈模式涉及到的角色如下:

    抽象處理者(Handler)角色:定義出一個處理請求的接口。如果需要,接口可以定義出一個方法以設(shè)定和返回對下家的引用。這個角色通常由一個php的抽象類或接口實現(xiàn)。上圖中Handler類的聚合關(guān)系給出了具體子類對下家的引用,抽象方法handleRequest()規(guī)范了子類處理請求的操作
    具體處理者(ConcreateHandle)角色:具體處理者接到請求后,可以選擇將請求處理掉,或者將請求傳給下家。由于具體處理者持有對下家的引用,因此,如果需要,具體處理這可以訪問下家


來看一個PHP的責任鏈模式編程實例:
 

  <?php      /**    * 抽象處理者角色    * @author wzy    *    */   abstract class Handle   {        /**      * 持有后繼的責任對象      *      * @var object      */     protected $successor;        /**      * 示意處理請求的方法,雖然這個示意方法是沒有傳入?yún)⑺氐?     * 但實際是可以傳入?yún)?shù)的,根據(jù)具體需要來選擇是否傳遞參數(shù)      */     public abstract function handleRequest ();        /**      * 取值方法      *      * @return object      */     public function getSuccessor ()     {       return $this->successor;     }        /**      * 賦值方法,設(shè)置后繼的責任對象      *      * @param object $objsuccessor            */     public function setSuccessor ($objsuccessor)     {       $this->successor = $objsuccessor;     }   }      /**    * 具體處理者角色    *    * @author wzy    *        */   class ConcreateHandler extends Handle   {        /**      * 判斷是否有后繼的責任對象      * 如果有,就轉(zhuǎn)發(fā)請求給后繼的責任對象      * 如果沒有,則處理請求      *      * @see Handle::handleRequest()      */     public function handleRequest ()     {       if ($this->getSuccessor() != null) {         echo "放過請求,將請求轉(zhuǎn)發(fā)給后繼的責任對象!<br>";         $this->getSuccessor()->handleRequest();       } else {         echo "處理請求,處理過程省略...<br>";       }     }   }      /**    * 客戶端代碼    */      // 組裝責任鏈   $handle1 = new ConcreateHandler();   $handle2 = new ConcreateHandler();   $handle1->setSuccessor($handle2);      // 提交請求   $handle1->handleRequest();   ?>             
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 大理市| 曲阜市| 江安县| 沾化县| 北辰区| 洪洞县| 电白县| 三河市| 中宁县| 谷城县| 许昌县| 黔西| 诸城市| 锡林郭勒盟| 汾阳市| 中西区| 故城县| 宜良县| 施秉县| 晋州市| 昭平县| 吴江市| 柞水县| 始兴县| 沙湾县| 石狮市| 霍城县| 报价| 乌海市| 东平县| 崇仁县| 梓潼县| 浑源县| 当雄县| 札达县| 廉江市| 绥阳县| 运城市| 金湖县| 北安市| 内乡县|