該文章屬於《編程中的那些經典套路——設計模式彙總》系列,而且如下內容基於語言PHPphp
今天來談談責任鏈模式,乍一聽責任鏈模式好像很高級的同樣,可是相信我,其實每位天朝的同窗都十分熟悉這個模式,責任鏈模式,就好像中國的官場制度同樣,每個級別的權利都區分的很細,舉個生活中的栗子:編程
村委不能越級去替鎮委辦事情,若是村委沒法解決,只能向上求助鎮委設計模式
鎮委不能越級去替市委辦事情,若是鎮委沒法解決,只能向上求助市委this
市委不能越級去替省委辦事情,若是市委沒法解決,只能向上求助省委spa
副領導不能越級去替正領導辦事情,若是副領導沒法解決,只能向上求助正領導設計
….code
…blog
直到找到合適的~ 鎮委(未解決)-> 市委(未解決)->省委(解決)->中央(老大不須要出馬,由於前面已經由小弟解決了~)事件
對的,就是這樣,每一個級別有本身職責,若是本身沒有權限解決這個問題,只能一層一層往上找,直到有一個合適的人出現而後解決問題。圖片
編程中的使用場景:
在一個論壇中,若是一我的的帖子被人舉報了,那麼這個帖子就會進入管理員的刪帖界面,那麼進入哪一個管理員的刪帖界面呢?這個時候就用到責任鏈模式了,把這個帖子給權限最低的管理員,若是這個管理員沒法處理,那麼就一層一層往上找,直到找到一我的有權利刪帖了,該流程纔算結束。
接下來請看具體代碼:
觀察者模式.php
<?php abstract class Duty { protected $higher=null; public abstract function operation($lev); } //一級官 class Lev1 extends duty{ protected $higher = 'lev2'; public function operation($lev){ if ($lev <= 1) { echo'村委解決'; }else{ $higher = new $this->higher; $higher->operation($lev); } } } //二級官 class Lev2 extends duty{ protected $higher = 'lev3'; public function operation($lev){ if ($lev <= 2) { echo'鎮委解決'; }else{ $higher = new $this->higher; $higher->operation($lev); } } } class Lev3{ protected $higher = 'lev4'; public function operation($lev){ if ($lev <= 3) { echo'市委解決'; }else{ $higher = new $this->higher; $higher->operation($lev); } } } class Lev4{ protected $higher = null; //沒有比中央更大的了,因此能夠不用判斷直接解決 public function operation($lev){ echo '中央解決'; } } $question = new Lev1();//從最低級的開始嘗試 $question->operation(3);//事件等級爲3,因此到市委才能解決 //output :"市委解決"; ?>
其實很簡單,就是在當前類中定義好本身的上級名字,遇到本身解決不了的問題,就直接實例化調用上級,讓它來處理。圖示:
該文章屬於《編程中的那些經典套路——設計模式彙總》系列