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

近期看了 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

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-26 06:16:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-26 06:16:02       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-26 06:16:02       87 阅读
  4. Python语言-面向对象

    2023-12-26 06:16:02       96 阅读

热门阅读

  1. Electron窗口绑定父窗口后center()不生效的解决方案

    2023-12-26 06:16:02       57 阅读
  2. 探索 Vue3 (五) 骨架屏

    2023-12-26 06:16:02       68 阅读
  3. iOS使用CXCallObserver监听电话接听与拨打

    2023-12-26 06:16:02       62 阅读
  4. 如何在Go中使用泛型

    2023-12-26 06:16:02       63 阅读
  5. K8S理论

    K8S理论

    2023-12-26 06:16:02      58 阅读
  6. 使用OpenSSL生成自签名SSL/TLS证书和私钥

    2023-12-26 06:16:02       68 阅读
  7. MATLAB入门

    2023-12-26 06:16:02       58 阅读
  8. k8s初学

    k8s初学

    2023-12-26 06:16:02      48 阅读
  9. k8s基础

    k8s基础

    2023-12-26 06:16:02      50 阅读
  10. 介绍 TensorFlow 的基本概念和使用场景。

    2023-12-26 06:16:02       65 阅读