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

代理设计模式:

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

三种经典应用场景:

        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.mzph.cn/diannao/38935.shtml

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

相关文章

【TB作品】智能台灯,ATMEGA16单片机,Proteus仿真

智能台灯 1 adc检测光强光敏电阻 显示电压 2 光强太高 也就是高于临界值 就关闭小灯 3 光强太低 也就是低于临界值 就打开小灯 3 按键修改临界值 显示 实验报告:基于ATMEGA16单片机的智能台灯设计与Proteus仿真 1. 实验背景 智能台灯是一种能够根据环境光强自动调…

代码随想录第40天|动态规划

完全背包 完全背包物品可以无限使用 01背包核心代码 01背包中的二维dp数组的两个for遍历可颠倒, 而一维dp数组的一定先遍历物品再遍历背包容量状态转移方程(背包容量一定为递减) 完全背包核心代码 (只在完全背包中一维dp数组嵌套顺序可颠倒, 实际题目需要确定遍历顺序) 状…

天线 有源 无源 参数

无源测试驻波比VSWR/回波损耗(Return Loss)≤2效率≥50%输入阻抗50R10%增益天线方向图3D场强图方向性 有源测试 OTA 传导测试:发射功率传导测试:接收灵敏度总辐射功率TRP(Total Radiated Power)≥发射功率减3dB总接收灵敏度TIS(Total Isotrop…

JDBC1(JDBC相关类与接口 ​连接mysql数据库​ 测试 不同数据库厂商实现-MySQL和Oracle)

目录 一、JDBC 1. JDBC相关类与接口 1.1 DriverManager 1.2 Connection 1.3 Statement 4.ResultSet 2. JDBC工作原理 二、连接mysql数据库 1. 导入jar包 2. 使用DriverManager加载驱动类 3. Connection接口 4. Statement接口 5. ResultSet接口 ​编辑 6. 关闭并…

【鸿蒙学习笔记】基础组件Progress:进度条组件

官方文档:Progress 目录标题 作用最全属性迭代追加进度赋值风格样式 作用 进度条组件 最全属性迭代追加 Progress({ value: 20, total: 100, type: ProgressType.Linear }).color(Color.Green)// 颜色.width(200)// 大小.height(50)// 高度.value(50)// 进度可更…

视频转音频:怎样提取视频中的音频?6个提取音频的小技巧(建议收藏)

怎样提取视频中的音频?当我们想从视频中提取出声音时,通常会遇到很多问题。无论是想单独提取出视频里的音频,还是把它转成方便储存或者分享的音频格式,这都会涉及到视频转音频的一个需求。因此,在这篇指南里&#xff0…

Spring Cloud - 项目搭建

1、新建maven项目 新建maven项目,该项目为主项目 1、新建maven项目 2、设置项目类型 3、选择项目原型 4、设置参数 5、等着完成 2、设置项目信息 1、右键,项目属性 2、设置jdk版本 3、选择jdk17 4、修改编译版本 5、右键项目,选择maven->u…

【吊打面试官系列-MyBatis面试题】模糊查询 like 语句该怎么写?

大家好&#xff0c;我是锋哥。今天分享关于 【模糊查询 like 语句该怎么写?】面试题&#xff0c;希望对大家有帮助&#xff1b; 模糊查询 like 语句该怎么写? 第 1 种&#xff1a;在 Java 代码中添加 sql 通配符。 string wildcardname “%smi%”; list<name> names …

技术派全局异常处理

前言 全局的异常处理是Java后端不可或缺的一部分&#xff0c;可以提高代码的健壮性和可维护性。 在我们的开发中&#xff0c;总是难免会碰到一些未经处理的异常&#xff0c;假如没有做全局异常处理&#xff0c;那么我们返回给用户的信息应该是不友好的&#xff0c;很抽象的&am…

【一篇文章带你搞懂--拉链表!!!拉链表的原理是什么!】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;我是书生♡&#xff0c;今天主要和大家分享一下拉链表的原理以及使用,希望对大家有所帮助。 大家可以关注我下方的链接更多优质文章供学习参考。 &#x1f49e;&#x1f49e;代码是你的画笔&#xff0c;创新是你…

Flink 运行时架构

Flink 运行时的组件 作业管理器&#xff08;JobManager&#xff09;资源管理器&#xff08;ResourceManager&#xff09;任务管理器&#xff08;TaskManager&#xff09;分发器&#xff08;Dispatch&#xff09; JobManager 控制一个应用程序执行的主进程&#xff0c;也就是说…

LiveNVR监控流媒体Onvif/RTSP用户手册-概览:CPU使用、存储使用、带宽使用、负载、内存使用、通道统计

LiveNVR监控流媒体Onvif/RTSP用户手册-概览:CPU使用、存储使用、带宽使用、负载、内存使用、通道统计 1、概览1.1、通道统计1.2、负载1.3、CPU使用1.4、存储使用1.5、带宽使用1.6、内存使用 2、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、概览 1.1、通道统计 显示可用通道&…

Lipschitz 连续,绝对连续

1. Lipschitz 连续 经常听到这个名词&#xff0c; Lipschitz 连续比普通连续更强&#xff0c;不仅要求函数连续&#xff0c;还要求函数的梯度小于一个正实数。 在单变量实数函数上的定义可以是&#xff1a; 对于定义域内任意两个 x 1 x_1 x1​ and x 2 x_2 x2​, 存在一个…

云计算与生成式AI的技术盛宴!亚马逊云科技深圳 Community Day 社区活动流程抢先知道!

小李哥最近要给大家分享7月7日在深圳的即将举办的亚马逊云科技生成式AI社区活动Community Day &#xff0c;干货很多内容非常硬核&#xff0c;不仅有技术分享学习前沿AI技术&#xff0c;大家在现场还可以动手实践沉浸式体验大模型&#xff0c;另外参与现场活动还可以领取诸多精…

顺序表(C语言详细版)

1. 线性表 线性表(lina list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串...... 线性表在逻辑上是线性结构&#xff0c;也就是说连续的一条直线。但是在物理结构上并…

一文汇总全球热门新闻API

新闻API通过提供快速、准确和全面的新闻内容&#xff0c;已经成为现代社会不可或缺的一部分&#xff0c;对人们的生活、工作环境和科技发展产生了深远的影响。新闻API使人们能够快速获取来自世界各地的实时新闻和信息&#xff0c;提高了信息的可访问性。通过新闻API&#xff0c…

C++算法学习心得八.动态规划算法(6)

1.最长递增子序列&#xff08;300题&#xff09; 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&…

Redis分布式集群部署

目录 一. 原理简述 二. 集群配置​​​​​​​ 2.1 环境准备 2.2 编译安装一个redis 2.3 创建集群 2.4 写入数据测试 实验一&#xff1a; 实验二&#xff1a; 实验三&#xff1a; 实验四&#xff1a; 添加节点 自动分配槽位 提升节点为master&#xff1a; 实验…

关于电商平台分类||电商平台商品分类接口|电商平台商品数据

电商平台 做电商&#xff0c;则要有电商平台&#xff0c;一个为 企业 或 个人 提供网上交易洽谈的平台。. 企业电子商务平台是建立在 Internet 网上进行商务活动的虚拟网络空间和保障商务顺利运营的管理环境&#xff1b;是协调、整合 信息流 、货物流、 资金流 有序、关联、高效…

会员信息一键同步!微盟与客如云联手打造智能服务新体验!

客户介绍 某房地产开发有限公司&#xff0c;自成立以来一直深耕于房地产行业&#xff0c;凭借卓越的开发实力和前瞻性的市场眼光&#xff0c;成为了业界备受瞩目的企业。多年来&#xff0c;该公司始终坚持“品质至上&#xff0c;客户为先”的经营理念&#xff0c;致力于为客户…