編程中的那些套路——關於責任鏈模式

該文章屬於《編程中的那些經典套路——設計模式彙總》系列,而且如下內容基於語言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 :"市委解決";
 
?>

其實很簡單,就是在當前類中定義好本身的上級名字,遇到本身解決不了的問題,就直接實例化調用上級,讓它來處理。圖示:
圖片描述

該文章屬於《編程中的那些經典套路——設計模式彙總》系列

相關文章
相關標籤/搜索