設(shè)計模式之責(zé)任鏈模式
什么是責(zé)任鏈模式
? ? ? ? 避免請求發(fā)送者與接收者耦合在一起,讓多個對象都有可能接收請求,將這些對象連接成一條鏈,并且沿著這條鏈傳遞請求,直到有對象處理它為止。職責(zé)鏈模式是一種對象行為型模式。
? ? ? ?設(shè)想一個場景,需要對一批從客戶端來的數(shù)據(jù)進(jìn)行不同的操作,我們使用多個不同的類負(fù)責(zé)不同的操作,而不是使用一個類集成所有操作,這樣做能讓代碼松耦合且簡潔。
? ? ? ?這些類被稱為處理器,第一個處理器會接收請求,如果它需要執(zhí)行操作則會進(jìn)行一次調(diào)用,如果不需要則會將請求傳遞給第二個處理器。類似地,第二個處理器確認(rèn)并將請求傳遞給責(zé)任鏈中的下一個處理器。如下圖為責(zé)任鏈模式的UML圖,Handler為抽象的處理類,其中有對象successor,為此類的處理類的引用,指向下一個具體處理類。handleRequest為處理方法。HandlerA與HandlerB分別為抽象類的實(shí)現(xiàn),具體處理類。Client調(diào)用整個處理器的調(diào)用鏈,它的職責(zé)是實(shí)例化一個處理器的鏈,讓后在第一個對象中調(diào)用handleRequest方法。

? ? ? 例如下圖中采購單的流轉(zhuǎn)過程,當(dāng)采購單的金額小于5萬時,主任進(jìn)行審核;當(dāng)采購單的金額介于5~10萬之間是,副董事長審核;當(dāng)采購單金額在10~50萬之間是,董事長審核;當(dāng)金額大于50萬時,董事會進(jìn)行討論審核。? ? ? ?

責(zé)任鏈模式有什么作用
責(zé)任鏈模式可以讓處理器按以下方式處理:如果需要則處理請求,否則將請求傳遞給下一個處理器。
現(xiàn)有場景:需要根據(jù)不同的活動類型對商品價格進(jìn)行失效處理。UML類圖如下:AbstractActivityInvalidItemHandler為抽象類,IidInvalidItem、BrandUidInvalidItem、EventIdInvalidItem為三個實(shí)現(xiàn)類。

責(zé)任鏈模式在實(shí)際開發(fā)中的應(yīng)用
AbstractActivityInvalidItemHandler?

BrandUidInvalidItem?

EventIdInvalidItem

IidInvalidItem

invalidRelateItemByRuleType
