設計模式 責任鏈模式

2022-02-14 07:23:24 字數 2578 閱讀 7104

責任鏈模式將鏈中每乙個節點都看作乙個物件,每個節點處理的請求都不同,且內部自動維護下乙個節點物件,當乙個請求從鏈式的首段發出時,會沿著責任鏈預設的路徑依次傳遞到每乙個節點物件,直至被鏈中的某個物件處理為止,屬於行為型設計模式。

使用場景:

public abstract class handler 

public abstract void handlerequest(string request);

public void handlernext(string request)

}}public class handlera extends handler

}public class handlerb extends handler

}

測試:

時序圖

下面使用者登陸的偽**,流程如下:非空判斷-->使用者存在性判斷-->許可權角色判斷,包括我目前所在的公司的**也是這樣,不過比下面的**長多了,好幾百行,十分臃腫,我們可以考慮使用責任鏈模式,將所有步驟串聯起來,可以使我們在具體編碼時更加專注於某乙個具體的業務邏輯處理。

@data

public class member

}public class memberservice

member member = checkexist(name, password);

if(member==null)

if(!"admin".equals(member.getrolename()))

system.out.println("允許操作");

}/**

* 模擬查詢資料庫

*/private member checkexist(string name, string password)

return null;}}

public abstract class handler 

public abstract void dohandle(member member);

}public class validatehandler extends handler

chain.dohandle(member);

}}public class loginhandler extends handlerelse

}}public class authhandler extends handler

system.out.println("允許操作");}}

測試:

handler  validatehandler = new validatehandler();

handler loginhandler = new loginhandler();

handler authhandler = new authhandler();

validatehandler.nextchain(loginhandler);

loginhandler.nextchain(authhandler);

member member = new member("admin", "123456");

validatehandler.dohandle(member);

上述**有乙個問題,具體組裝鏈式結構的角色是memberservice類,當鏈式結構較長時,memberservice的工作會異常繁瑣,且**臃腫,產生問題原因是鏈式結構組裝非常複雜,而對於複雜物件的建立,我們很自然想到建造者模式,我們可以改造handler**。

public abstract class handler 

public abstract void dohandle(member member);

public static class builder

this.tail.nextchain(handler);

this.tail = handler;

return this;

}public handler build()}}

測試:

member member = new member("admin", "123456");

handler ha = new handler.builder()

.addhandler(new validatehandler())

.addhandler(new loginhandler())

.addhandler(new authhandler())

.build();

ha.dohandle(member);

這樣的**寫法就比上一種要優美的多。

設計模式 責任鏈模式

定義 避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將這些請求連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止。例項 請假加薪審批 using system using system.collections.generic using system.text namespa...

設計模式 責任鏈模式

責任鏈可以使得系統在不影響客戶端的前提下動態的安排責任鏈和分配責任。責任鏈模式中包含的角色有抽象處理者,具體處理者以及請求的傳送者。責任鏈可以是一條直線,乙個環鏈甚至乙個樹結構。它使得每乙個具體的訊息處理者都有可能處理訊息。抽象的請求處理者 author wly public abstract cl...

設計模式 責任鏈模式

責任鏈模式 chain ofresponsibility pattern 基本概念 責任鏈,顧名思義,是指乙個負責相應請求的行為鏈。首先要理解的是乙個鏈,然後通過這個鏈來管理個行為。什麼時候會用到責任鏈 對於乙個請求,沒有特別指明由誰處理或沒有指明如何處理。此時可以使用責任鏈的形式,用過將各種處理行...