装饰器模式和责任链模式区别

近期看了 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.mzph.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}}我想要做的是用其他…