責任鏈模式

2021-10-03 07:19:11 字數 1888 閱讀 3824

定義

責任鏈模式:使多個物件都有機會處理請求,從而避免了請求的傳送者和接受者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有物件處理它為止。

責任鏈模式(chain of responsibility) 是行為型設計模式之一,它是一條鏈,鏈上每個節點都可以處理不同的內容,自己處理不了的交給下乙個節點,直到最後乙個節點。這樣的話,請求者不必直到這條鏈上誰可以處理,只要把請求往鏈裡塞就行了。

角色職責鏈模式主要包含以下角色。

抽象處理者(handler)角色:定義乙個處理請求的介面,包含抽象處理方法和乙個後繼連線。

具體處理者(concrete handler)角色:實現抽象處理者的處理方法,判斷能否處理本次請求,如果可以處理請求則處理,否則將該請求轉給它的後繼者。

客戶類(client)角色:建立處理鏈,並向鏈頭的具體處理者物件提交請求,它不關心處理細節和請求的傳遞過程。 實現

責任鏈

抽象處理者

package factory.cor;

public

abstract

class

handler

public

void

setnext

(handler next)

public

abstract

void

handlerequest

(string request)

;}

具體處理者1

package factory.cor;

public

class

concretehandler1

extends

handler

else

else}}

}

具體處理者2

package factory.cor;

public

class

concretehandler2

extends

handler

else

else}}

}

測試

package factory.cor;

public

class

client

}

結果

優點降低了物件之間的耦合度。該模式使得乙個物件無須知道到底是哪乙個物件處理其請求以及鏈的結構,傳送者和接收者也無須擁有對方的明確資訊。

增強了系統的可擴充套件性。可以根據需要增加新的請求處理類,滿足開閉原則。

增強了給物件指派職責的靈活性。當工作流程發生變化,可以動態地改變鏈內的成員或者調動它們的次序,也可動態地新增或者刪除責任。

責任鏈簡化了物件之間的連線。每個物件只需保持乙個指向其後繼者的引用,不需保持其他所有處理者的引用,這避免了使用眾多的 if 或者 if···else 語句。

責任分擔。每個類只需要處理自己該處理的工作,不該處理的傳遞給下乙個物件完成,明確各類的責任範圍,符合類的單一職責原則。 缺點

不能保證每個請求一定被處理。由於乙個請求沒有明確的接收者,所以不能保證它一定會被處理,該請求可能一直傳到鏈的末端都得不到處理。

對比較長的職責鏈,請求的處理可能涉及多個處理物件,系統效能將受到一定影響。

職責鏈建立的合理性要靠客戶端來保證,增加了客戶端的複雜性,可能會由於職責鏈的錯誤設定而導致系統出錯,如可能會造成迴圈呼叫。

責任鏈模式

責任鏈模式 chain of responsibility 的目標是使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞請求,直到有乙個物件處理它為止。舉個例子。你到銀行去辦理業務,只是簡單的存個錢,也許atm就解決你的問題。如果你是為了交費...

責任鏈模式

有3個request與3個handler,每個request由相應的handler來處理,當乙個handler與request不匹配時則傳遞給下乙個handler來處理 inte ce request class request1 implements request class request2 ...

責任鏈模式

了解了一下責任鏈模式,簡單的說下自己的理解吧 責任鏈就是說待處理的資料在request的時候,先經過filter1的處理,再經過filter2的處理,然後response時,先經過filter2的處理,在經過filter1的處理。實現思路是filterchain包括filter1和filter2,同...