日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【设计模式】责任链模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

發布時間:2025/6/17 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【设计模式】责任链模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、責任鏈模式簡介
  • 二、責任鏈模式相關設計模式
  • 三、責任鏈模式 代碼示例
    • 1、用戶賬戶類
    • 2、校驗器父類
    • 3、用戶名校驗器
    • 4、密碼校驗器
    • 5、電話號碼校驗器
    • 6、運行測試





一、責任鏈模式簡介



責任鏈模式 , 又稱為 職責鏈模式 ;

責任鏈模式定義 :請求 創建一個接收該 請求對象 , 鏈條中每個元素都是一個對象 ;

責任鏈模式類型 : 行為型 ;


責任鏈模式 適用場景 : 一個 請求處理 , 需 要多個對象 中的 一個或若干個對象 協作進行處理 ;


責任鏈模式 優點 :

① 解耦 : 請求的 發送者接收者 解耦 ; 接收者 是 請求的處理者 ;

② 動態組合 : 責任鏈 可以 動態組合 , 使用配置 設置責任鏈的 順序是否出現 ; 可以隨時對責任鏈排序 , 隨時增加拆除責任鏈中的某個請求對象 ;


責任鏈模式 缺點 :

① 性能 : 如果 責任鏈 太長 , 或責任鏈中請求的 處理時間過長 , 可能會 影響性能 ;

② 個數 : 責任鏈 可能過多 ;





二、責任鏈模式相關設計模式



責任鏈模式 與 狀態模式 比較 :

責任鏈模式 中 , 并 不指定 下一個處理的 請求對象 是哪個 ; 責任鏈 中 鏈條順序 可以 任意組合排序 ;

狀態模式 中 , 需要讓 每個 狀態 知道下一個需要處理的狀態是誰 ;





三、責任鏈模式 代碼示例



需求 :

  • OA 中審批流程 , 需要 組長 , 經理 , 總監 審批請求 ;
  • 賬號注冊時進行校驗 , 先后校驗 賬號 , 密碼 , 手機號 等 ;

使用責任鏈模式實現上述操作 , 可以消除很多 if else 分支 , 增加功能的擴展性 , 如果在責任鏈條中添加一個請求 , 只需要新建一個類即可 , 這個類就是責任鏈中的請求元素 ; 可以選擇性使用一個或多個或所有的請求對象 ;


這里以賬戶校驗為示例 : 使用 責任鏈 , 校驗用戶賬戶的 賬號 , 密碼 , 手機號 等信息 ;


1、用戶賬戶類


package responsibility;/*** 用戶賬戶信息* 包含 : 賬號 , 密碼 , 電話號碼*/ public class UserAccount {private String userName;private String password;private String phoneNumber;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;} }

2、校驗器父類


校驗類的父類 , 校驗賬號 , 校驗密碼 , 校驗手機號 的請求類都需要 繼承該類 ;

封裝請求對象 : 責任鏈的核心是 請求對象包含一個自己 , 包含一個與自己相同類型的對象 ; 責任鏈模式中的 校驗器 封裝一個 校驗器 本身 , 使用 protected 修飾的目的是讓子類可以獲取到該類 ;

設置下一個請求對象 : 每個請求對象中 , 設置下一個請求對象 , 組成鏈式結構 ;

請求過程 : 抽象方法 , 需要子類實現 , 主要 實現 請求對象 需要的具體的業務邏輯 , 如校驗 , 審批 等 ;

package responsibility;/*** 校驗類的父類* 校驗賬號 , 校驗密碼 , 校驗手機號 的請求類都需要繼承該類*/ public abstract class Verify {/*** 責任鏈的核心是類中包含一個自己* 包含一個與自己相同類型的對象* 責任鏈模式中的 校驗器 封裝一個 校驗器 本身* 使用 protected 修飾的目的是讓子類可以獲取到該類*/protected Verify verify;/*** 設置下一個校驗器* @param verify*/public void setNextVerify(Verify verify) {this.verify = verify;}/*** 校驗過程* 需要子類進行實現*/public abstract void deploy(UserAccount userAccount); }

3、用戶名校驗器


package responsibility;import com.sun.xml.internal.ws.util.StringUtils;/*** 校驗用戶名稱*/ public class UserNameVerify extends Verify{@Overridepublic void deploy(UserAccount userAccount) {if (userAccount.getUserName() != null){System.out.println("用戶名校驗通過");// 獲取下一個驗證器if (verify != null) {verify.deploy(userAccount);}} else {System.out.println("用戶名校驗未通過");}} }

4、密碼校驗器


package responsibility;/*** 校驗密碼*/ public class PasswordVerify extends Verify{@Overridepublic void deploy(UserAccount userAccount) {if (userAccount.getPassword() != null){System.out.println("密碼校驗通過");// 獲取下一個驗證器if (verify != null) {verify.deploy(userAccount);}} else {System.out.println("密碼校驗未通過");}} }

5、電話號碼校驗器


package responsibility;/*** 校驗手機號*/ public class PhoneVerify extends Verify{@Overridepublic void deploy(UserAccount userAccount) {if (userAccount.getPhoneNumber() != null){System.out.println("手機號校驗通過");// 獲取下一個驗證器if (verify != null) {verify.deploy(userAccount);}} else {System.out.println("手機號校驗未通過");}} }

6、運行測試


package responsibility;public class Main {public static void main(String[] args) {UserNameVerify userNameVerify = new UserNameVerify();PasswordVerify passwordVerify = new PasswordVerify();PhoneVerify phoneVerify = new PhoneVerify();UserAccount userAccount = new UserAccount();userAccount.setUserName("username");userAccount.setPassword("123456");userAccount.setPhoneNumber("13888888888");// 創建職責鏈userNameVerify.setNextVerify(passwordVerify);passwordVerify.setNextVerify(phoneVerify);// 開始校驗 , 執行職責鏈userNameVerify.deploy(userAccount);} }

運行結果 :

總結

以上是生活随笔為你收集整理的【设计模式】责任链模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。