傳統的軟體模式,使用者發起請求,需要知道這個請求具體是有誰來處理,如果整個請求處理流程實際多個處理者,那麼使用者發起請求就需要知道所有的請求者。
這樣的缺點就是向使用者暴露了太多的內部細節,不安全,而且也造成了系統的複雜性。
責任鏈模式就是解決這個問題。
責任鏈的核心就是作為請求者不需要知道請求是由誰來處理的,只需要把請求發給第乙個處理者,最終會返回乙個處理後的結果。
責任鏈模式遮蔽了請求的處理過程,發起的請求到底是由誰來處理的,不需要關心。
一:比如在使用者存錢。
乙個存款請求,乙個處理者,只能處理人民幣。 但是隨著業務的發展,請求者的數量增加,處理的型別也增加了,還需要處理美元,歐元,日元等。
這個時候就可以用責任鏈模式,在第乙個處理者後面新增乙個鏈,如果是存人民幣,就仍然使用第乙個業務邏輯來處理,如果是美元就傳遞給第二個處理邏輯來處理,如果是日元,歐元,依次傳遞下去。
這樣的好處是,只需要擴充套件實現類就可以解決需求變更的問題,不需要對原有的業務邏輯做大的更改。
二:使用者註冊
業務需求:在頁面上有使用者註冊功能:
註冊使用者分兩種: 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,同...