代理设计模式和装饰器设计模式的区别

news2024/11/25 20:48:46

代理设计模式:

作用:为目标(原始对象)增加功能(额外功能,拓展功能)

三种经典应用场景:

        1:给原始对象增加额外功能(spring添加事务,Mybatis通过代理实现缓存功能等等)

        2:远程代理(网络通信,输出传输(RPC,Dubbo))

        3:无中生有,看不见类文件,却能进行使用(MyBatis中使用Mapper接口的实现类)

MyBatis使用代理模式实现缓存:MyBatis源码--04:MyBatis缓存实现-CSDN博客

MyBatis使用代理获得Mapper接口实现类:MyBatis源码分析01 ---- 通过代理确定Mapper接口实现类过程-CSDN博客

装饰器设计模式`:

作用:为目标拓展功能(核心功能)

经典应用场景:

        MyBatis实现缓存的过程实际上就使用了装饰器设计模式:

                MyBatis通过Cache接口实现缓存功能,我们来看看Cache接口的实现类:

实际上上面的实现方式包括俩大类:PerpetualCache为核心实现类,其它类为核心类的装饰器,用来增强核心类PerpetualCache的功能。

使用方法:

这种直接将实现类作为参数的使用方法可以看作是装饰器设计模式的一种标志.并且装饰器可以"套娃使用",如上图,"套娃"为PerpetualCache增加了日志功能和Lru换出策略.

区别总结

本质区别:

        装饰器增加核心功能,和被装饰对象做的是同一件事,为同一个目标服务.

        代理增加额外功能,和被代理对象做的是不同的事情. 另外注意远程代理和无中生有的使用场景.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1897983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Motion Guidance: 扩散模型实现图像精确编辑的创新方法

在深度学习领域,扩散模型(diffusion models)因其能够根据文本描述生成高质量图像而备受关注。然而,这些模型在精确编辑图像中对象的布局、位置、姿态和形状方面仍存在挑战。本文提出了一种名为“运动引导”(motion gui…

图书馆数据仓库

目录 1.数据仓库的数据来源为业务数据库(mysql) 初始化脚本 init_book_result.sql 2.通过sqoop将mysql中的业务数据导入到大数据平台(hive) 导入mysql数据到hive中 3.通过hive进行数据计算和数据分析 形成数据报表 4.再通过sq…

如何取消闪迪Micro SD卡的写保护?这个技巧很有效!

由于受写保护影响,无法格式化闪迪Micro SD卡?别担心!通过本文你可以学习如何解除闪迪Micro SD卡的写保护。 我的闪迪SD卡有写保护怎么办? “我打算格式化我的闪迪SD卡。但当我进行格式化时,提示我磁盘被写保护。我想用…

Linux配置固定ip地址

虚拟机的Linux操作系统,其IP地址是通过DHCP服务获取的 DHCP:动态获取IP地址,即每次重启设备后都会获取一次,可能导致IP地址频繁变更。 一般系统默认的ip地址设置都是自动获取,故每次系统重启后ip地址都可能会不一样&a…

数字化产科管理平台全套源码,java产科电子病历系统源码

数字化产科管理平台全套成品源码,产科电子病历系统源码,多家大型妇幼专科医院应用案例。源码完全授权交付。 数字化产科管理平台(智慧产科系统)是为医院产科量身定制的信息管理系统。它管理了孕妇从怀孕开始到生产结束42天以内的一…

欢乐钓鱼大师攻略:西沙群岛攻略,内置自动辅助云手机!

《欢乐钓鱼大师》是一款以钓鱼为主题的休闲游戏,玩家可以在虚拟的钓鱼世界中体验真实的钓鱼乐趣,并通过捕捉各种珍稀鱼类来提升自己的钓鱼技能和成就。在这篇攻略中,我们将重点介绍如何在西沙群岛区域有效地捕捉各种典藏鱼类,并提…

数据结构之顺序表专题

在学习数据结构之前我们要先了解什么是数据结构? 1.数据结构相关概念 1.什么是数据结构? 数据结构是由“数据”和“结构”两词组合而来。 什么是数据?常见的数值1、2、3、4.、教务系统里保存的用户信息(姓名、性别、年龄、学历等等)、网页里肉眼可以…

Qt项目:基于Qt实现的网络聊天室---注册模块

文章目录 基本页面设计创建登录界面创建注册界面优化样式完善注册类界面 客户端逻辑完善客户端增加post逻辑客户端配置管理 邮箱注册服务认证服务读取配置邮箱验证服务联调设置验证码过期封装redis操作类封装redis连接池注册功能Server端接受注册请求封装mysql连接池封装DAO操作…

传统视觉Transformer的替代者:交叉注意力Transformer(CAT)

传统视觉Transformer的替代者:交叉注意力Transformer(CAT) 在深度学习的世界里,Transformer架构以其在自然语言处理(NLP)领域的卓越表现而闻名。然而,当它进入计算机视觉(CV)领域时,却面临着计算成本高昂和推理速度慢的双重挑战。现在,一项革命性的创新——交叉注意…

【Linux】—VMware安装Centos7步骤

文章目录 前言一、虚拟机准备二、CentOS7操作系统安装 前言 本文介绍VMware安装Centos7步骤。 软件准备 软件:VMware Workstation Pro,直接官网安装。镜像:CentOS7,镜像官网下载链接:https://vault.centos.org/&#x…

[SAP ABAP] 子例程

子例程 示例1 主程序(Z437_TEST_2024) INCLUDE文件(Z437_TEST_2024_F01) 输出结果如下所示 示例2 主程序(Z437_TEST_2024) INCLUDE文件(Z437_TEST_2024_F01) 输出结果如下所示 补充扩展练习 主程序(Z437_TEST_2024) INCLUDE文件(Z437_TEST_2024_F01) 输出结果如下所示 提示…

使用Rough.js库在画布上绘制一只毛毛虫

本文由ScriptEcho平台提供技术支持 项目地址:传送门 代码应用场景介绍 本代码使用Rough.js库在画布上绘制一只毛毛虫。 代码基本功能介绍 初始化画布: 使用Rough.js库创建画布,并设置画布尺寸。 绘制毛毛虫身体: 使用椭圆形和…

【C++】 解决 C++ 语言报错:未定义行为(Undefined Behavior)

文章目录 引言 未定义行为(Undefined Behavior, UB)是 C 编程中非常危险且难以调试的错误之一。未定义行为发生时,程序可能表现出不可预测的行为,导致程序崩溃、安全漏洞甚至硬件损坏。本文将深入探讨未定义行为的成因、检测方法…

上千套源码分享免费(师哥师姐毕设分享)

项目管理平台详解 项目管理平台是专为项目管理者设计的系统软件,旨在在有限的资源约束下,通过系统的观点、方法和理论,对项目涉及的全部工作进行有效管理。这种平台不仅有助于项目从投资决策到结束的全程计划、组织、指挥、协调、控制和评价…

html纯原生网页引入vue3版本的quill editor

效果图 版本 vueup/vue-quill v1.2.0vue3.3.8Element Plus v2.4.2 引入流程 找一个vue3的项目, 然后安装插件vue版本的quill: vue-quill npm install vueup/vue-quill --save官方地址:https://vueup.github.io/vue-quill/ 安装完成之后,把vue-quil插件下…

[单master节点k8s部署]18.监控系统构建(三)Grafana安装

Grafana是一个跨平台的开源的度量分析和可视化工具。支持多种数据源,比如OpenTSDB,Prometheus,ElasticResearch,Cloudwatch等。 Grafana安装 通过yaml配置grafana的pod和service,grafana工作在kube-system的命名空间…

小学英语语法

目录 a和an的用法名词的单复数be动词和人称代词(主格)指示代词形容词物主代词名词所有格双重所有格方位介词some,any和no的用法How many和How much的用法情态动词can的用法祈使句人称代词(宾格)常见实义动词的用法一般…

也说字母U:房子到底是什么?

​ 不记得是第几期了,湖南卫视有档很火的音乐节目叫《歌手》,那一期是最终是韩磊夺得了冠军,他有一杀手锏,叫《向天再借五百年》,他要不夺冠,好像大家也对不起对这首歌的印象,因为他是多少人的记…

【网址】Andorid Studio历史版本下载

Andorid Studio官网是最新版本的下载,历史版本的下载地址 :https://developer.android.google.cn/studio/archive 1.如果是空白页面的话,切换语言【中文切换成English】 2.滑倒最后点击同意 3.历史版本浏览 4.下载安装包 遇到问题1&#xf…

【HICE】基于用户认证的虚拟服务搭建

1.创建特定的内容 --账号与密码(需要认证访问)【里面】 2.编辑配置1.conf的内容,更新httpd 3.编辑hehe网页(外部公开) cd /www/ echo hehe > hehe/index.html 4.更改本地hosts和window下的解析 5.浏览器下验证内…