Java實(shí)現(xiàn)設(shè)計模式之責(zé)任鏈模式
1.什么是責(zé)任鏈模式
當(dāng)一個請求可能需要多個對象中的某個進(jìn)行處理時,將這些對象連成一條鏈,并沿者這條鏈傳遞該請求,知道有一個對象處理它為止。這樣的情況或需求時,可以采用責(zé)任鏈模式。
2.如何實(shí)現(xiàn)
1)處理者接口(Handler),負(fù)責(zé)定義處理請求的抽象方法,并設(shè)置下一個處理著的方法。
2)具體處理者,實(shí)現(xiàn)Handler接口中定義的方法。實(shí)現(xiàn)處理用戶請求的邏輯,并設(shè)置下一個處理請求的對象。如果能夠處理用戶求情就處理,如果不能處理,交給下一個對象進(jìn)行處理。
3)封裝類。對以上的具體處理者進(jìn)行封裝,使它們形成一個處理鏈條。
3.代碼實(shí)現(xiàn)
以一個資金審批舉例
1)處理者接口
/**
* 處理者接口
* 定義處理請求的方法
* 設(shè)置下一個處理者
*/
public interface Handler {
public void handleRequest(int money);
public void setNextHandler(Handler handler);
}2)處理者1
/**
* 具體處理者--經(jīng)理
*/
public class Manager implements Handler {
Handler handler;
@Override
public boolean handleRequest(int money) {
boolean result = false;
if(money<1000){
System.out.println("同意");
result = true;
}else{
//超出處理范圍,交給下一個處理著
if(handler!=null){
result = handler.handleRequest(money);
}
}
return result;
}
@Override
public void setNextHandler(Handler handler) {
this.handler = handler;
}
}3)處理著2
/**
* 具體處理者--總經(jīng)理
*/
public class GeneralManager implements Handler {
Handler handler;
@Override
public boolean handleRequest(int money) {
boolean result = false;
if(money<10000){
System.out.println("同意");
result = true;
}else{
//超出處理范圍,交給下一個處理著
if(handler!=null){
result = handler.handleRequest(money);
}
}
return result;
}
@Override
public void setNextHandler(Handler handler) {
this.handler = handler;
}
}4)封裝類
/**
* 封裝類
* 將所有的具體處理者封裝成一條處理鏈
*/
public class Contxt {
private Handler handler1,handler2;
public Contxt(){
}
public void createHandlerChain(){
handler1 = new Manager();
handler2 = new GeneralManager();
handler1.setNextHandler(handler2);
}
public void responseRequest(int request){
handler1.handleRequest(request);
}
}5)測試類
public class TestMain {
public static void main(String args []){
int meney = 500;
Contxt context = new Contxt();
//創(chuàng)建處理鏈
context.createHandlerChain();
//相應(yīng)請求
boolean result = context.responseRequest(meney);
System.out.println(result);
}
}4.總結(jié)
責(zé)任鏈模式的優(yōu)點(diǎn)
1)責(zé)任鏈中的對象只和自己的后繼是低耦合關(guān)系,和其他對象毫無關(guān)聯(lián),是程序更加的靈活。
2)程序可以動態(tài)的增加、刪除處理者的關(guān)系,或重新委派新的處理者
到此這篇關(guān)于Java實(shí)現(xiàn)設(shè)計模式之責(zé)任鏈模式的文章就介紹到這了,更多相關(guān)Java責(zé)任鏈模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
jfinal中stateless模式嵌入shiro驗(yàn)證的實(shí)現(xiàn)方式
這篇文章主要介紹了jfinal中stateless模式嵌入shiro驗(yàn)證,今天,我們就來嘗試一種通過攔截器來實(shí)現(xiàn)的Stateless Jfinal嵌入方式,需要的朋友可以參考下2022-06-06
WebSocket實(shí)現(xiàn)聊天室業(yè)務(wù)
這篇文章主要為大家詳細(xì)介紹了WebSocket實(shí)現(xiàn)聊天室業(yè)務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-08-08
openFeign服務(wù)之間調(diào)用保持請求頭信息處理方式
這篇文章主要介紹了openFeign服務(wù)之間調(diào)用保持請求頭信息處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
Java 中Object的wait() notify() notifyAll()方法使用
這篇文章主要介紹了Java 中Object的wait() notify() notifyAll()方法使用的相關(guān)資料,需要的朋友可以參考下2017-05-05
Java通過python命令執(zhí)行DataX任務(wù)的實(shí)例
今天小編就為大家分享一篇Java通過python命令執(zhí)行DataX任務(wù)的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08

