責任鏈模式以及應用場景

2021-10-19 05:15:19 字數 2877 閱讀 5503

責任鏈模式(chain of responsibility pattern)為請求建立了乙個接收者物件的鏈。這種模式給予請求的型別,對請求的傳送者和接收者進行解耦。這種型別的設計模式屬於行為型模式。

在這種模式中,通常每個接收者都包含對另乙個接收者的引用。如果乙個物件不能處理該請求,那麼它會把相同的請求傳給下乙個接收者,依此類推。

使用者登入分為使用者名稱密碼登入和手機驗證碼登入,兩種登入模式分別需要進行不同的資訊校驗;例如使用者名稱密碼登入需要進行使用者是否存在、使用者是否被鎖定、密碼校驗等校驗。手機驗證碼登入需要進行使用者是否存在、驗證碼是否為空、驗證碼是否正確、使用者是否鎖定、使用者是否被禁用等校驗;責任鏈的另乙個應用場景:springsecurity對請求過濾 filterchainproxy

責任鏈之前傳遞資料類

/*** 資料庫使用者實體

*/private authuser user;

/*** 使用者登入引數

*/private loginbo loginbo;

/*** redis操作例項

*/private redistemplate redistemplate;

}this.user = user;

this.loginbo = loginbo;

this.redistemplate = redistemplate;

}} 責任鏈抽象介面

public abstract class userlogincheckfilter 

public userlogincheckfilter getnextfilt er()

/*** 執行處理方法

** @return

*/}

使用者是否存在檢查處理類

public class nullusercheckfilter extends userlogincheckfilter 

@override

public userlogincheckfilter getnextfilter()

/*** 判斷登入使用者是否為空

** @return

*/@override

throw new mixexception(user_not_exist);}}

}

密碼校驗處理類

public class passwordcheckfilter extends userlogincheckfilter 

@override

public userlogincheckfilter getnextfilter()

/*** 判斷密碼是否正確

** @return

*/@override

try}catch (illegalargumentexception e)

}}

驗證碼為空處理類

public class nullcodecheckfilter extends userlogincheckfilter 

@override

public userlogincheckfilter getnextfilter()

/*** 判斷簡訊驗證碼是否為空

** @return

*/@override

if (null == code)

}}

簡訊驗證碼校驗處理類

public class errorcodecheckfilter extends userlogincheckfilter 

@override

public userlogincheckfilter getnextfilter()

/*** 判斷簡訊驗證碼是否錯誤

** @return

*/@override

/*** 查詢簡訊code

*//**

* 判斷簡訊驗證碼是否匹配

*//**

* 獲取輸入錯誤驗證碼次數,如果大於3次,需要返回給前端錯誤次數過多,請求驗證碼

*/if (null != errorcodecount && errorcodecount.intvalue() >= redisconstant.auth_message_code_error_count) else

}/**

* 簡訊驗證碼正確,繼續執行後面的處理*/}

}

手機驗證碼登入處理邏輯

userlogincheckfilter userlogincheckfilter = new nullusercheckfilter(

new nullcodecheckfilter(

new errorcodecheckfilter(

new lockedusercheckfilter(

new disableusercheckfilter(null)))));

if(loginresult)

使用者名稱密碼登入處理邏輯

userlogincheckfilter userlogincheckfilter = new nullusercheckfilter(

new lockedusercheckfilter(

new disableusercheckfilter(

new passwordcheckfilter(null))));

if(loginresult)

設計模式應用場景

設計模式應用場景 1 command 建立和執行事務 實體上的解耦 時間上的解耦 undo方法 2 active object模式 該模式與command模式結合 實現多執行緒控制的一項古老的技術,為許多任務業系統提供了乙個簡單的多工核心。3 template method 與 strategy 分...

單利模式應用場景

單例模式應用的場景一般發現在以下條件下 1 資源共享的情況下,避免由於資源操作時導致的效能或損耗等。如上述中的日誌檔案。2 控制資源的情況下,方便資源之間的互相通訊。如執行緒池等。python 1 python 的模組就是天然的單例模式,因為模組在第一次匯入時,會生成 pyc 檔案,當第二次匯入時,...

責任鏈模式的應用

責任鏈模式是一種物件的行為模式,就是用來處理相關事務責任的一條執行鏈,執行鏈上有多個節點,每個節點都有機會 條件匹配 處理請求事務,如果某個節點處理完了就可以根據實際業務需求傳遞給下乙個節點繼續處理或者返回處理完畢。我們在遇到需要對一條資料進行處理,處理到乙個標準,直到這個獲取的結果滿足這個標準。1...