JAVA職責鏈模式

2021-08-28 02:47:05 字數 3879 閱讀 2767

通過本文將學習到

table of contents前言

1、職責鏈模式的概念

2、職責鏈的uml圖

3、職責鏈的實現

4、指責鏈的優缺點

5、職責鏈的使用場景

6、總結

今天寫了個小指令碼,感覺還挺有意思的!寫程式就是要寫點自己覺得好玩的東西麼。不然,寫出來都沒有一點成就感。還有今天慶祝wj小姐姐可以溜了,還是挺好的。業務小姐姐教了我很多!接下來的日子不會這麼輕鬆了。再有今天看了一部電影閃靈,這部電影最大得感受就是想要讓人滅亡得先讓他瘋狂!

話不多說,職責鏈是乙個行為型得設計模式在系統中如果存在多個物件可以處理乙個客戶端請求時,可以將相關的物件連成一條鏈來經行對請求的處理,其中一家如果能處理則直接處理否則交由給下一家。

職責鏈模式:避免將乙個請求的傳送者和請求的處理者耦合在一起,讓多個物件都有處理請求的機會。將接受請求的物件連成一條線鏈並且沿著這條鏈傳遞請求,直到有乙個物件能夠處理它為止。

在我得工作中,就有這種類似的例子。比如工作流,當我進行乙個單據的提交,首先我要交給我得業務部組長審批,然後是部門經理,然後是財務經理。然後財務經理就批准成功給我發錢。在這個過程中我只需要將我的請求傳送給我的部門組長,然後由它幫我進行審批,和傳遞。而我就只要等待最後的結果。

簡單來說,職責鏈模式就是將傳送請求者,和請求接受者進行了解耦。我(請求傳送者)不必,自己將每乙個給請求傳送給請求接受者們(我得各個上級).

1、handle()、抽象處理類在類中定義了乙個success的屬性,抽象的處理方法。success是對下家的引用,因為不同的接受物件處理方法不同所以用抽象方法設計處理方法。通過對下個處理物件的引用行出了一條鏈。

2、concretehandle(),具體的處理類,通過繼承或實現抽象處理類,並且實現的對應的請求方法。當請求傳送到具體的處理類時,首先進行判斷是否自己能夠處理該請求,如果可以則執行處理方法,否則將該請求**給下乙個具體處理類。形成一條鏈!

來乙個例子:假如我是乙個採購員要買一批貨,我要提交申請單。但是我得金額是有限制的,比如。1w部門領導批,10w副董事批,10w-30w董事批,30w-50w董事會批。就是實現乙個這樣的審批鏈。

purchaserequest:審批單類,做請求類。

package chainofresponsibility;

/** *

* title: purchaserequest

* description:採購申請單(請求類)

* @author hand_weili

* @date 2023年9月13日

*/public class purchaserequest

public string getpurpose()

public void setpurpose(string purpose)

public int getnumber()

public void setnumber(int number)

public double getamount()

public void setamount(double amount)

}

package chainofresponsibility;

/** *

* description:審批抽象類

* @author hand_weili

* @date 2023年9月13日

*/ protected string name ; //定義下乙個物件的名字

this.name=name;

} //建立鏈

} public abstract void handlepurchaserequest(purchaserequest purchaserequest) ;

}

主任類:第乙個審批節點。我自己設定的。

package chainofresponsibility;

/** *

* title: director

* description:主任類

* @author hand_weili

* @date 2023年9月13日

*/ public director(string name)

@override

public void handlepurchaserequest(purchaserequest purchaserequest) else }}

副董事:第二個審批節點 

package chainofresponsibility;

/** *

* title: vicepresident

* description:副董事類第二個審批的物件

* @author hand_weili

* @date 2023年9月13日

*/ public vicepresident(string name)

@override

public void handlepurchaserequest(purchaserequest purchaserequest) else

}}

董事類:第三個審批節點

package chainofresponsibility;

/** *

* title: president

* description:董事進行審批

* @author hand_weili

* @date 2023年9月13日

*/ public president(string name)

@override

public void handlepurchaserequest(purchaserequest purchaserequest) else

}}

董事會:最後乙個節點 

package chainofresponsibility;

public congress(string name)

@override

public void handlepurchaserequest(purchaserequest purchaserequest)

}

client:測試類,記住審批鏈的節點都是自己進行設定的,並不是被用審批者來建立的。

優點;職責鏈模式使得乙個物件無需知道是哪乙個物件處理其請求,物件僅需要知道該請求會被處理即可,降低了系統的耦合度。請求處理物件僅需要位置乙個指向其後繼者的引用。再給物件分派職責時,職責鏈可以更多的靈活性。

缺點:

由於乙個請求沒有明確的接受者,那麼就比呢能夠保證它一定被處理,該請求可能到最後的末端也不會被處理啦。對於比較長的職責鏈,請求的處理可能涉及多個處理物件,系統效能將受到乙個定的影響。如果建鏈不當,可能會導致迴圈呼叫。陷入死迴圈。

java職責鏈模式

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

職責鏈模式 java實現

需求分析 你把今天你向經理申請,經理沒權利 然後向總監上報 總監也沒有許可權 向總經理上報的事 寫成 看看 不一定是加薪 也有可能是請假申請 public classrequestelseelseelse if request.gettype 加薪 request.getnumber 500 els...

java設計模式 職責鏈模式

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