Java設計模式之行為型模式(責任鏈模式)介紹與說明

一、核心概念與定義

責任鏈模式是一種行為型設計模式,其核心思想是將請求沿著處理對象鏈傳遞,直到某個對象能夠處理該請求為止。通過這種方式,解耦了請求的發送者與接收者,使多個對象有機會處理同一請求。
關鍵特點:

  1. 動態解耦:請求發送者無需知道具體處理者,只需將請求發送到鏈的起點。
  2. 靈活擴展:可通過動態調整鏈內處理者順序或增減節點,滿足開閉原則。
  3. 鏈式傳遞:每個處理者決定是否處理請求,否則將請求傳遞給下一個節點。

二、模式結構

責任鏈模式包含以下角色:

  1. 抽象處理者(Handler)
    • 定義處理請求的接口,并包含對下一個處理者的引用。
    • 例如:public abstract class Handler { protected Handler next; }
  2. 具體處理者(ConcreteHandler)
    • 實現抽象處理者的邏輯,判斷是否處理請求。若無法處理,則調用next.handleRequest()傳遞請求。
    • 例如:請假審批中的TeamLeaderManager等角色。
  3. 客戶端(Client)
    • 創建處理鏈并發送請求,通常只需與鏈的起點交互。
    • 例如:構造鏈teamLeader.setNext(manager).setNext(director)并調用handleRequest()

三、實現方式

  1. 鏈表式實現(經典方式)
    通過鏈表維護處理者順序,每個處理者持有下一個節點的引用:
public abstract class Handler {protected Handler next;public void setNext(Handler next) { this.next = next; }public abstract void handleRequest(Request request);
}
// 具體處理者示例(日志級別處理)
public class ErrorLogHandler extends Handler {@Overridepublic void handleRequest(Request request) {if (request.getLevel() == LogLevel.ERROR) {System.out.println("Error: " + request.getMessage());} else if (next != null) {next.handleRequest(request);}}
}

特點:

  • 適合需要動態調整鏈結構的場景。
  • 可能因鏈過長導致性能下降。
  1. 數組式實現(優化方式)
    使用數組或集合存儲處理者,按順序依次調用:
public class HandlerChain {private List handlers = new ArrayList<>();public void addHandler(Handler handler) { handlers.add(handler); }public void process(Request request) {for (Handler h : handlers) {if (!h.handle(request)) break; // 中斷式處理}}
}

特點:

  • 更易維護,避免循環引用風險。
  • 適合固定順序的處理流程(如過濾器鏈)。

四、優缺點分析

優點缺點
解耦性:請求發送者與處理者無直接依賴。請求可能未被處理:若鏈未覆蓋所有情況,請求可能被忽略。
靈活性:動態增減或調整處理者順序。性能損耗:長鏈可能導致多次判斷與傳遞。
單一職責:每個處理者僅關注自身邏輯。調試復雜:鏈式調用可能增加調試難度。

五、典型應用場景

  1. 審批流程
    • 示例:請假申請按天數由組長、經理、總監逐級審批。
    teamLeader.setNext(manager).setNext(director);
    teamLeader.handleRequest(5); // 輸出:Manager 批準了5天假期。
    
  2. 日志系統
    • 按日志級別(DEBUG/INFO/ERROR)分層處理,不同級別日志由對應處理器記錄。
  3. 過濾器鏈
    • Web框架中的請求過濾器(如認證、日志記錄、權限校驗)。
  4. 事件處理
    • 傳感器信號依次經過噪聲過濾、數據格式化、異常檢測等處理器。

六、與其他模式的對比

  • 策略模式:策略模式通過組合不同算法實現單一功能,而責任鏈模式通過鏈式傳遞請求。
  • 命令模式:命令模式將請求封裝為對象,責任鏈模式關注請求的傳遞路徑。

七、總結

責任鏈模式通過鏈式處理機制,有效解耦了請求發送者與接收者,適用于需要動態分配職責或按順序處理請求的場景。實際開發中需權衡鏈的長度與性能,優先選擇數組式實現或結合框架(如Spring攔截器鏈)提升效率。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914294.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914294.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914294.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL server之版本的初認知

SQL server之版本的初認知 為什么要編寫此篇文檔呢&#xff0c;主要是因為在最近測試OGG實時同步SQL server數據庫表數據的時候&#xff0c;經過多次測試&#xff0c;發現在安裝了一套SQL server2017初始版本&#xff0c;未安裝任何補丁的時候&#xff0c;在添加TRANDATA的時候…

【前端】jQuery動態加載CSS方法總結

在jQuery 中動態加載 CSS 文件有多種方法&#xff0c;以下是幾種常用實現方式&#xff1a; 方法 1&#xff1a;創建 <link> 標簽&#xff08;推薦&#xff09; // 動態加載外部 CSS 文件 function loadCSS(url) {$(<link>, {rel: stylesheet,type: text/css,href:…

Python爬蟲實戰:研究xlwings庫相關技術

1. 引言 在金融科技快速發展的背景下,數據驅動決策已成為投資領域的核心競爭力。金融市場數據具有海量、多源、實時性強等特點,傳統人工收集與分析方式難以滿足高效決策需求。Python 憑借其豐富的開源庫生態,成為金融數據分析的首選語言。結合 Requests、BeautifulSoup 等爬…

Linux 內核日志中常見錯誤

目錄 **1. `Oops`****含義****典型日志****可能原因****處理建議****2. `panic`****含義****典型日志****可能原因****處理建議****3. `BUG`****含義****典型日志****可能原因****處理建議****4. `kernel NULL pointer`****含義****典型日志****可能原因****處理建議****5. `WA…

Linux驅動開發2:字符設備驅動

Linux驅動開發2&#xff1a;字符設備驅動 字符設備驅動開發流程 字符設備是 Linux 驅動中最基本的一類設備驅動&#xff0c;字符設備就是一個一個字節&#xff0c;按照字節流進行讀寫操作的設備&#xff0c;讀寫數據是分先后順序的。比如最常見的點燈、按鍵、 IIC、 SPI&#x…

RuoYi-Cloud 驗證碼處理流程

以該處理流程去拓展其他功能模塊處理流程&#xff0c;進而熟悉項目開發代碼一、思路JavaWeb流程主干線&#xff1a;發起請求、處理請求、響應請求二、登錄頁面在登錄頁面按鍵F12打開開發者工具&#xff0c;點擊network&#xff0c;刷新頁面&#xff0c;點擊code&#xff0c;查看…

云計算三大服務模式深度解析:IaaS、PaaS、SaaS

架構本質&#xff1a;云計算服務模式定義了資源抽象層級和責任分擔邊界&#xff0c;形成從基礎設施到應用的全棧服務金字塔。三種模式共同構成云計算的服務交付模型核心框架。一、服務模式全景圖 #mermaid-svg-f0Klw2fbuhBQqJTh {font-family:"trebuchet ms",verdana…

【sql學習之拉鏈表】

1.拉鏈表理解 記錄歷史。記錄一個事物從開始&#xff0c;一直到當前狀態的所有變化的信息。字段說明&#xff1a; start_dt&#xff1a;該條記錄的生命周期開始時間 end_dt&#xff1a;該條記錄的生命周期結束時間 end_dt’9999/12/31’表示該條記錄目前處于有效狀態 如果查詢當…

STM32中實現shell控制臺(shell窗口輸入實現)

文章目錄 一、總體結構二、串口接收機制三、命令輸入與處理邏輯四、命令編輯與顯示五、歷史命令管理六、命令執行七、初始化與使用八、小結在嵌入式系統開發中,使用串口Shell控制臺是一種非常常見且高效的調試方式。本文將基于STM32平臺,分析一個簡潔但功能完整的Shell控制臺…

區分三種IO模型和select/poll/epoll

部分內容來源&#xff1a;JavaGuide select/poll/epoll 和 三種IO模型之間的關系是什么&#xff1f;區分普通IO和IO多路復用普通IO&#xff0c;即一個線程對應一個連接&#xff0c;因為每個線程只處理一個客戶端 socket&#xff0c;目標明確&#xff1a;線程中直接操作該 socke…

Actor-Critic重要性采樣原理

目錄 AC的數據低效性&#xff1a; 根本原因&#xff1a;策略更新導致數據失效 應用場景&#xff1a; 1. 離策略值函數估計 2. 離策略策略優化 3. 經驗回放&#xff08;Experience Replay&#xff09; 4. 策略梯度方法 具體場景分析 場景1&#xff1a;連續策略更新 場…

【贈書福利,回饋公號讀者】《智慧城市與智能網聯汽車,融合創新發展之路》

「5G行業應用」公號作家團隊推出《智慧城市與智能網聯汽車&#xff0c;融合創新發展之路》。本書由機械工業出版社出版&#xff0c;探討如何通過車城融合和創新應用&#xff0c;促進汽車產業轉型升級與生態集群發展&#xff0c;提升智慧城市精準治理與出行服務效能。&#xff0…

5G NR PDCCH之處理流程

本節主要介紹PDCCH處理流程概述。PDCCH&#xff08;Physical Downlink Control Channel&#xff0c;物理下行控制信道&#xff09;主要用于傳輸DCI&#xff08;Downlink Control Information&#xff0c;下行控制信息&#xff09;&#xff0c;用于通知UE資源分配&#xff0c;調…

力扣網編程135題:分發糖果(貪心算法)

一. 簡介本文記錄力扣網上涉及數組方面的編程題&#xff1a;分發糖果。這里使用貪心算法的思路來解決&#xff08;求局部最優&#xff0c;最終求全局最優解&#xff09;&#xff1a;每個孩子只需要考慮與相鄰孩子的相對關系。二. 力扣網編程135題&#xff1a;分發糖果&#xff…

每日mysql

什么是Mysql索引最左匹配原則&#xff1f;最左匹配原則是指&#xff0c;在復合索引中&#xff0c;查詢條件需要從左到右和索引開始依次完全匹配的時候&#xff0c;復合索引才可以被有效使用。因為聯合索引在建立b樹的過程中是根據索引的順序從左到右進行排序的&#xff0c;所以…

樹莓派5-ollama-linux-arm64.tgz 下載

1.下載 由于官方下載速度太慢且容易失敗&#xff0c;我這里上傳了一份到云盤供大家下載&#xff1a; 通過網盤分享的文件&#xff1a;ollama-linux-arm64.tgz 鏈接: https://pan.baidu.com/s/1tx_OPpl-8O2HJfXlP4tXTg?pwdffwx 提取碼: ffwx --來自百度網盤超級會員v4的分享 …

2024年團體程序設計天梯賽

比賽鏈接 https://ac.nowcoder.com/acm/contest/80027 A&#xff1a; JMU-1 考察搜索的能力百度一下可知&#xff0c;2024 年天梯賽總決賽的比賽日為4 月 20日 參考代碼 //2024 年天梯賽總決賽的比賽日為4 月 20日 void solve(){//A20-7cout<<"H\n"; } B&…

基于CMMI的軟件質量管理體系深度解析

核心理念&#xff1a;CMMI&#xff08;Capability Maturity Model Integration&#xff09;是通過過程改進驅動質量提升的體系化框架&#xff0c;其本質是建立可量化、可重復、可優化的工程管理能力一、CMMI體系框架與演進 #mermaid-svg-MdDBl2P8fSHYDHMc {font-family:"t…

2025年滲透測試面試題總結-2025年HW(護網面試) 44(題目+回答)

安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 2025年HW(護網面試) 44 1. SQL注入常用函數 2. SQLMap爆當前庫名參數 3. Nmap探測系統參數 4. Nmap小寫 …

【操作系統-Day 5】通往內核的唯一橋梁:系統調用 (System Call)

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…