職責鏈模式 java實現

2021-08-11 14:06:16 字數 2270 閱讀 6032

需求分析:

你把今天你向經理申請,經理沒權利

,然後向總監上報

,總監也沒有許可權

,向總經理上報的事

,寫成**看看

,不一定是加薪

,也有可能是請假申請

.public

classrequestelseelseelse

if(request.gettype()=="加薪"&&request.getnumber()<=500)else

if(request.gettype()=="加薪"&&request.getnumber()>500)else

if(request.gettype()=="加薪"&&request.getnumber()<=500)else

if(request.gettype()=="加薪"&&request.getnumber()>500) {

system.out

.println(name+": "+request.getcontent()+" 數量"+request.getnumber()+"再說吧");

public

classdemo {

public

static

voidmain(string args) {

commonmanager

jingli=newcommonmanager("經理");

majordomo

zongjian=newmajordomo("總監");

generalmanager

zongjingli=newgeneralmanager("總經理");

//設定上級,完全可以根據需求來更改設定

jingli.setsuperior(zongjian);

zongjian.setsuperior(zongjingli);

request

request=newrequest();

request.settype("加薪");

request.setcontent("小菜請求加薪");

request.setnumber(1000);

//客戶端的請求都是由經理發起,但實際誰來決策由具體管理者來處理,客戶端並不知道

request

request2=newrequest();

request2.settype("請假");

request2.setcontent("小菜請假");

request2.setnumber(3);

//客戶端的請求都是由經理發起,但實際誰來決策由具體管理者來處理,客戶端並不知道

職責鏈模式:

使多個物件都有機會處理請求,從而避免請求的傳送者和接受者的耦合關係

.將這個物件連城一條鏈

,並沿著這條鏈傳遞請求

,直到有乙個物件處理它為止

職責鏈模式的好處:

①請求者不管哪個物件來處理,反正該請求會被處理

;這就使得接受者和傳送者都沒有對方明確資訊

,且鏈中的物件自己也並不知道鏈的結構

.結果是職責鏈可簡化物件的相互連線

,它們僅僅需要保持乙個指向其後繼者的引用

,而不需要保持它所有的候選接受者的引用

,這也就大大降低了耦合度

②由於是在客戶端來定義鏈的結構,也就是說

,我可以隨時增加和修改處理乙個請求的結構

,增加了給物件指派職責的靈活性

.但是也要當心

,乙個請求極有可能到了鏈的末端都得不到處理

,或者因為沒有正確配置而得不到處理

,所以需要事先考慮全面

.(這就跟現實中寄信一樣

,因為位址不對

,最終也無法送達)

③解決了原來大量的分支判斷造成的難維護和靈活性差的問題

注意:①你需要事先給每個具體的管理者設定他的上司是哪個類,也就是設定後繼者

②需要在每個具體管理者處理請求時,做出判斷

,是可以處理這個請求

,還是必須推卸責任

,轉移給後繼者處理

.

java職責鏈模式

職責鏈模式 為了避免請求的傳送者和接收者之間的耦合關係,使多個接受物件都有機會處理請求。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。通俗一點說就是,當客戶提交乙個請求時,從第乙個物件開始,鏈中收到請求的物件要麼親自處理它,要麼 給鏈中的下乙個候選者。提交請求的物件並不知道...

JAVA職責鏈模式

通過本文將學習到 table of contents前言 1 職責鏈模式的概念 2 職責鏈的uml圖 3 職責鏈的實現 4 指責鏈的優缺點 5 職責鏈的使用場景 6 總結 今天寫了個小指令碼,感覺還挺有意思的!寫程式就是要寫點自己覺得好玩的東西麼。不然,寫出來都沒有一點成就感。還有今天慶祝wj小姐姐...

java設計模式 職責鏈模式

職責鏈的本質 分離職責,動態組合 樣例 定義職責物件的介面 public abstract class handler 處理聚餐費用的申請 param user 申請人 param fee 申請的費用 return public abstract string handlerfeerequest s...