裝飾器模式和責任鏈模式區別

近期看了 mybatis 的源碼,發現二級緩存這塊用了裝飾器模式將各個功能的緩存進行嵌套,源碼上也是講到使用了裝飾器模式,但是看著跟責任鏈模式類似,本著搞清楚的想法,搜了很多資料,看了書籍《Head First 設計模式》上對于裝飾器模式和責任鏈模式的講解,思考如下

裝飾器模式

特點

通過委托來實現(一般是定義了一個 delegate 變量來引用定義的操作的接口),流程中的各個節點都參與了處理,運行時動態處理。

使用場景

適用于靈活變動需要組合處理的情況,即協作處理,各個節點無阻塞,直到執行到最底層的節點,需要反饋會逆序返回。

編碼形式

簡單,對于執行的操作只需要調用一次即可,各個具體裝飾類實現會鏈式調用委托對象的方法進行處理。

使用案例

spring 中的 aop 實現的事務管理和日志管理。

書籍《Head First 設計模式》上對于裝飾器模式用了一個飲料加配料的例子來講解這個問題。

責任鏈模式

特點

各個節點經過了流轉,但是不一定進行了處理(能處理就處理,不能處理就走過場轉交給別人),即使處理了不一定有結果。自己處理不了的交給別人。

使用場景

適用于對于某些操作可能指定了一系列操作步驟(例如審批),各個步驟都需要執行。

編碼形式

麻煩,對于執行的操作每個過程需要編碼實現。

使用案例

工作流審批

javaee 中的 filter chain

參考鏈接

https://blog.csdn.net/qq_42449106/article/details/131542919

https://blog.csdn.net/jiadajing267/article/details/106889562

https://www.cnblogs.com/darope/p/12695256.html

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

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

相關文章

AI行業新趨勢:百模大戰中的變革與未來

AI行業新趨勢:百模大戰中的變革與未來 人工智能,這個曾經被視為科幻小說的情節,如今已經成為我們生活中的常態。從智能手機、自動駕駛汽車,到智能家居、醫療診斷,AI的應用已經深入到我們生活的各個角落。然而&#xf…

多維時序 | MATLAB實CNN-BiGRU-Mutilhead-Attention卷積網絡結合雙向門控循環單元網絡融合多頭注意力機制多變量時間序列預測

多維時序 | MATLAB實現CNN-BiGRU-Mutilhead-Attention卷積網絡結合雙向門控循環單元網絡融合多頭注意力機制多變量時間序列預測 目錄 多維時序 | MATLAB實現CNN-BiGRU-Mutilhead-Attention卷積網絡結合雙向門控循環單元網絡融合多頭注意力機制多變量時間序列預測預測效果基本介…

ubuntu 22.04 安裝mysql服務

完整內容: https://developer.aliyun.com/article/1260321 # 安裝服務 sudo apt install mysql-server# 按向導設置root密碼 sudo mysql_secure_installation# 使用設置的密碼登錄 sudo mysql -u root -p也可以使用工具登錄,例如: navicat for mysql

協同工作php,PHPOA:靈活、高效、協同,讓企業高效運轉

原標題:PHPOA:靈活、高效、協同,讓企業高效運轉PHPOA系統作為一個管理系統,它的職責就是為企業高效運轉而服務,以提高企業的辦公效率為己任,減少不必要的資源浪費為責任。它保持高度的靈活性、高效性與協同…

ubuntu搭建php開發環境記錄

2019獨角獸企業重金招聘Python工程師標準>>> 這兩天自己在阿里云上面買了一個ecs,系統選的是ubuntu16.04,第一件事就是先搭環境,這次準備使用lamp組合。 Apache安裝 首先安裝apache服務器,ubuntu下面使用apt-get來下載…

php datediff 函數,dateAdd與DateDiff函數的js代碼

1、DateAdd函數:復制代碼 代碼示例:function DateAdd(interval,number,date){switch(interval.toLowerCase()){case "y": return new Date(date.setFullYear(date.getFullYear()number));case "m": return new Date(date.setMonth(date.getMont…

mysql索引為啥要選擇B+樹 (下)

有讀者在 mysql索引為啥要選擇B樹 (上) 上篇文章中留言總結了選擇 B 樹的原因,大體上說對了,今天我們再一起來看看具體的原因。 索引為什么要保存在硬盤中首先要明白幾個概念,服務器存儲一般分內存和硬盤,內存的大小相對于硬盤來說…

des加解密java c#,C#編寫DES加密、解密類

這個C#類封裝的DES加密解密,可以使用默認秘鑰進行加密、解密,也可以自定義秘鑰進行加密、解密,調用簡單方便。示例一:using System;using System.Security.Cryptography;using System.Text;namespace DotNet.Utilities{/// /// DE…

八年開發程序員淺析SpringBoot 之 Shiro 與 Redis 多級緩存問題

前言 來自不愿意透露姓名的小師弟的投稿。這篇主要講了,項目中配置了多緩存遇到的坑,以及解決辦法。 發現問題 在一次項目實踐中有實現多級緩存其中有已經包括了 Shiro 的 Cache ,本以為開啟 redis 的緩存是一件很簡單的事情只需要在啟動類上…

Web端H.265播放器研發解密

音視頻編解碼對于前端工程師是一個比較少涉足的領域,涉及到流媒體技術中的文本、圖形、圖像、音頻和視頻多種理論知識的學習,才能夠應用到具體實踐中,本團隊在多媒體領域深耕兩年多,才算是有一定產出,我們自研web播放器…

拳擊 武術java父類,拳擊是一種很有力量的武術類型

原標題:拳擊是一種很有力量的武術類型拳擊是一種很有力量的武術類型,拳擊比賽策略有很多,圍繩技術是其中之一。那么拳擊比賽策略技巧有哪些呢?下面養生之道網為您解析拳擊比賽策略技巧有哪些,看看吧。1、當拳手靠在圍繩…

捧上天的AI落地困難,“ 不懂變通”的華為云如何應付?

前幾年,AI幾乎被捧上天,各大公司傾巢出動,推出了不少吸眼球的應用和產品。如今,這些AI成果是否真得讓企業從中獲得價值?繞不開的數據、隱私和安全問題作何解?不同領域、不同規模、不同技術能力的企業如何最…

Apache-Flink深度解析-DataStream-Connectors之Kafka

Kafka 簡介Apache Kafka是一個分布式發布-訂閱消息傳遞系統。 它最初由LinkedIn公司開發,LinkedIn于2010年貢獻給了Apache基金會并成為頂級開源項目。Kafka用于構建實時數據管道和流式應用程序。它具有水平擴展性、容錯性、極快的速度,目前也得到了廣泛的…

Java使用繼承的語法是,Java基礎語法八 繼承

1、超類和子類超類和子類父類與子類多態:一個對象變量可以指示多種實際類型的現象稱為多態一個變量可以引用父類對象,也可以引用其子類對象,這就是多態。不能將一個超類的引用賦給子類變量,因為調用子類方法時可能發生運行錯誤子類…

kaka 1.0.0 重磅發布,服務于后端的事件領域模型框架。

百度智能云 云生態狂歡季 熱門云產品1折起>>> kaka 1.0.0正式發布了,從三個月前的kaka-notice-lib 1.0.0的發布,經過多次研磨,終于迎來了本次重大更新。 kaka是一款服務于java后端的事件領域模型框架,主要目的為解耦業…

java配置文件工具類,java項目加載配置文件的工具類

java項目加載配置文件的工具類package com.loadproperties;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class ConfigUtil {private static InputStream input;private volatile Properties configuration new Properties();/…

如何把WAV格式音頻轉換為MP3格式

WAV為微軟公司(Microsoft)開發的一種聲音文件格式,它符合RIFF(Resource Interchange File Format)文件規范,用于保存Windows平臺的音頻信息資源,被Windows平臺及其應用程序所廣泛支持,因此在聲音文件質量和CD相差無幾&…

php 異步處理類,php異步處理類

該類可以請求HTTP和HTTPS協議,還可以處理301、302重定向以及GZIP壓縮等。[PHP]代碼//使用方法require(asynHandle.class.php);$obj new asynHandle();$result $obj->Request(http://baidu.com);$result2 $obj->Get(https://mail.google.com/);echo "{…

惡意軟件盯上了加密貨幣,兩家以色列公司受到攻擊

近日,網絡安全公司Palo Alto Networks威脅研究部門Unit 42發博稱,已確認Cardinal RAT自2017年4月起對兩家從事外匯和加密交易軟件開發的以色列金融科技公司發起過攻擊。 Cardinal RAT是可遠程訪問特洛伊木馬(RAT),攻擊…

php 自定義打印模板下載,PHP – 創建自定義模板系統?

我已經在這里搜索過,令人驚訝的是我找不到答案.我發現了一個類似的線程,但沒有真正的解決方案.復雜的部分是循環,如果我不需要循環我可以只是做一個常規替換.所以,我有一個帶有一些標記的.html文件,如下所示:{{startloop}}{{imgname}}{{endLoop}}我想要做的是用其他…