設計模式(十七):職責鏈模式

轉載請注明作者和出處http://www.reibang.com/p/b77f5a97fee9

運行平臺: Windows

php版本: php7.0

作者簡介: 一個本該成為游戲職業(yè)選手卻被編程耽誤的程序員


指責鏈模式

職責鏈模式善玫,類似于我們在公司發(fā)送一個加薪的申請干奢,首先主管看了严嗜,發(fā)現(xiàn)沒有權限失息,轉交給經(jīng)理髓涯,經(jīng)理看了杂数,發(fā)現(xiàn)也沒有權限,轉交給總監(jiān)锉试,總監(jiān)經(jīng)過調查猫十,發(fā)現(xiàn)你的表現(xiàn)還可以,于是同意了你的申請呆盖,這樣一個鏈式傳遞就是職責鏈模式拖云。

責任鏈模式定義:

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

責任鏈模式角色:

  • 抽象處理者(Handler)角色:定義出一個處理請求的接口邑贴。如果需要,接口可以定義 出一個方法以設定和返回對下家的引用叔磷。
  • 具體處理者(ConcreteHandler)角色:具體處理者接到請求后拢驾,可以選擇將請求處理掉,或者將請求傳給下家改基。由于具體處理者持有對下家的引用繁疤,因此,如果需要秕狰,具體處理者可以訪問下家稠腊。
<?php

// 減免類
class Reduce{
    // 減免金額
    public $reduceMoney;
}

// 審批抽象類(需要具體審批類實現(xiàn))
abstract  class Manager{
    // 審批角色
    protected $roleName;

    // 上級審批對象
    protected $managerObj;

    // 設置審批角色名稱
    public function __construct($roleName) {
        $this->roleName = $roleName;
    }

    // 設置當前審批角色的上級角色
    public function setLeader(Manager $manager){
        $this->managerObj = $manager;
    }

    //審批方法
    abstract function audit(Reduce $reduce);
}

class LeaderManager extends Manager{
    //可減免金額最大值
    CONST REDUCE_MONEY = 1000;

    //執(zhí)行審批
    public function audit(Reduce $reduce) {
        if($reduce->reduceMoney > self::REDUCE_MONEY){
            //轉發(fā)上級角色審批
            $this->managerObj->audit($reduce);
        }else{
            echo $this->roleName."審批通過".PHP_EOL;
        }
    }
}

class ZongJianManager extends Manager{

    //可減免金額最大值
    CONST REDUCE_MONEY = 10000;

    //執(zhí)行審批
    public function audit(Reduce $reduce) {
        if($reduce->reduceMoney > self::REDUCE_MONEY){
            //轉發(fā)上級角色審批
            $this->managerObj->audit($reduce);
        }else{
            echo $this->roleName."審批通過".PHP_EOL;
        }
    }
}

class BossManager extends Manager{
    //可減免金額最大值
    CONST REDUCE_MONEY = 100000;

    //執(zhí)行審批
    public function audit(Reduce $reduce) {
        if($reduce->reduceMoney > self::REDUCE_MONEY){
            //轉發(fā)上級角色審批
            echo $this->roleName."審批拒絕".PHP_EOL;
        }else{
            echo $this->roleName."審批通過".PHP_EOL;
        }
    }
}

//客戶端調用
$manage1 = new LeaderManager('組長');
$manage2 = new ZongJianManager('總監(jiān)');
$manage3 = new BossManager('老板');

//實例化請求減免類
$reduce = new Reduce();
$reduce->reduceMoney = 1000000;
//設定層級關系
$manage1->setLeader($manage2);
$manage2->setLeader($manage3);

$manage1->audit($reduce);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鸣哀,隨后出現(xiàn)的幾起案子架忌,更是在濱河造成了極大的恐慌,老刑警劉巖我衬,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叹放,死亡現(xiàn)場離奇詭異,居然都是意外死亡挠羔,警方通過查閱死者的電腦和手機井仰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來破加,“玉大人俱恶,你說我怎么就攤上這事》兑ǎ” “怎么了速那?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尿背。 經(jīng)常有香客問我端仰,道長,這世上最難降的妖魔是什么田藐? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任荔烧,我火速辦了婚禮,結果婚禮上汽久,老公的妹妹穿的比我還像新娘鹤竭。我一直安慰自己,他們只是感情好景醇,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布臀稚。 她就那樣靜靜地躺著,像睡著了一般三痰。 火紅的嫁衣襯著肌膚如雪吧寺。 梳的紋絲不亂的頭發(fā)上窜管,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機與錄音稚机,去河邊找鬼幕帆。 笑死,一個胖子當著我的面吹牛赖条,可吹牛的內容都是我干的失乾。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼纬乍,長吁一口氣:“原來是場噩夢啊……” “哼碱茁!你這毒婦竟也來了?” 一聲冷哼從身側響起仿贬,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤纽竣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后诅蝶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體退个,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡募壕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年调炬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舱馅。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡缰泡,死狀恐怖,靈堂內的尸體忽然破棺而出代嗤,到底是詐尸還是另有隱情棘钞,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布干毅,位于F島的核電站宜猜,受9級特大地震影響,放射性物質發(fā)生泄漏硝逢。R本人自食惡果不足惜姨拥,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渠鸽。 院中可真熱鬧叫乌,春花似錦、人聲如沸徽缚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凿试。三九已至排宰,卻和暖如春似芝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背额各。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工国觉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人虾啦。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓麻诀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親傲醉。 傳聞我的和親對象是個殘疾皇子蝇闭,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361