責任鏈模式解析

2021-09-27 10:10:11 字數 2379 閱讀 6010

傳統的軟體模式,使用者發起請求,需要知道這個請求具體是有誰來處理,如果整個請求處理流程實際多個處理者,那麼使用者發起請求就需要知道所有的請求者。

這樣的缺點就是向使用者暴露了太多的內部細節,不安全,而且也造成了系統的複雜性。

責任鏈模式就是解決這個問題。

責任鏈的核心就是作為請求者不需要知道請求是由誰來處理的,只需要把請求發給第乙個處理者,最終會返回乙個處理後的結果。

責任鏈模式遮蔽了請求的處理過程,發起的請求到底是由誰來處理的,不需要關心。

一:比如在使用者存錢。

乙個存款請求,乙個處理者,只能處理人民幣。 但是隨著業務的發展,請求者的數量增加,處理的型別也增加了,還需要處理美元,歐元,日元等。

這個時候就可以用責任鏈模式,在第乙個處理者後面新增乙個鏈,如果是存人民幣,就仍然使用第乙個業務邏輯來處理,如果是美元就傳遞給第二個處理邏輯來處理,如果是日元,歐元,依次傳遞下去。

這樣的好處是,只需要擴充套件實現類就可以解決需求變更的問題,不需要對原有的業務邏輯做大的更改。

二:使用者註冊

業務需求:在頁面上有使用者註冊功能:

註冊使用者分兩種: vip使用者和普通使用者

這個場景就可以使用責任鏈模式。

從前台傳遞過來的使用者資訊,無論是vip使用者,還是普通使用者,統一傳遞到乙個介面,通過責任鏈完成任務的處理。

比如定義乙個registeraction類,把通過http傳遞過來的物件進行組裝,組裝成乙個hashmap型別的物件userinfomap,傳遞給handler介面的兩個實現類。

具體由哪乙個類來處理,根據hashmap上的使用者表示來決定。

分為抽象類,具體實現類,幾個屬性類,最後場景類:

抽象類

package com.company.chainofresponsibiliypattern;

/*抽象處理者:

然後在需要定義幾個具體的實現者,幾個實現類

*/public abstract class handler

else

else

}return response;

}//設定下乙個處理者是誰

public void setnext(handler handler2)

//每個處理者都有乙個處理級別

protected abstract level gethandlerlevel();

//每個處理者都必須實現處理任務

protected abstract response echo(request request);

}

具體實現類

package com.company.chainofresponsibiliypattern;

public class concretehandler1 extends handler

//設定自己的處理級別

protected level gethandlerlevel()

}

package com.company.chainofresponsibiliypattern;

public class concretehandler2 extends handler

//設定自己的處理級別

protected level gethandlerlevel()

}

package com.company.chainofresponsibiliypattern;

public class concretehandler3 extends handler

//設定自己的處理級別

protected level gethandlerlevel()

}

幾個屬性類

package com.company.chainofresponsibiliypattern;

/*負責定義請求和處理級別

*/public class level

package com.company.chainofresponsibiliypattern;

/*功能: 負責封裝請求

*/public class request

}package com.company.chainofresponsibiliypattern;

/*功能: 負責封裝鏈中返回的結果

*/public class response

場景類

package com.company.chainofresponsibiliypattern;

/*場景類: 在場景類當中,對鏈進行組裝

*/public class client

}

《設計模式之禪》 秦小波

責任鏈模式

責任鏈模式 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,同...