11-13 代理模式

news/2024/7/6 6:34:41 标签: 代理模式

调用者 代理对象 目标对象

代理对象除了可以完成核心任务,还可以增强其他任务,无感的增强

代理模式目的:
不改变目标对象的目标方法的前提,去增强目标方法

分为:静态代理,动态代理


静态代理

有对象->前提需要有一个类,那么我们可以事先写好一个类,他是一个代理类

程序员为目标类编写一个代理类(用于增强目标方法),要求目标类和代理类实现同一个接口,让用户感觉代理和目标是一类的东西,无感的

创建一个maven

创包com.fs.staticproxy

创目标类和代理类的统一接口:

创建目标类:

目标方法之前可能需要扩展 日志记录 权限管理等等  这些不是非核心代码、功能,可能就是一些简单的业务,但是又不省略,但是他又不是固定的,时可变的,而卸载目标类就是硬代码

 创建代理类:代理代理 -> 我中有你  有一个目标对象

出现问题:重复

解决办法:我(代理类)中有(目标类)你

给属性复赋值:构造方法 set方法 实现了代理类增强方法

测试类(调用者):

需要改变时,目标对象、目标类不需要改变,核心代码不用改变,,只需要改代理对象

缺点:多个接口要实现相同的方法,增强相同的方法,那么需要创建很多个代理类,这是不对的,

核心接口加方法,代理类也要加方法实现对应的方法,目标对象和代理类都需要维护

导致静态代理的缺点问题根源->代理类的存在

动态代理

这个静态代理类不要你写,通过code动态生成

存的是BussinessInterface接口  -> 使得这个代理类代理的范围更加多一点,不再只有Buiness这一个实现类的代理类,他可以实现只要你的目标类实现BussinessInterface这一类   统一接口下面所有的不同类型的这个目标类都可以被我的代理类所代理

站在使用者这边,我们在乎的是代理类对象,而不是代理类,基于这个,

jdk可以自动生成生成这个代理类对象,确实可以实现,我要代哪一个接口,接口告诉我,然后jdk有一个api方法,经过这个api方法的时候,他就可以得到一个api代理对象,此时1我就不需要代理类了,我直接用这个代理对象就行了

接口不能创建方法,因为它没有构造方法(用于创建对象),,现在想创建对象,

根据接口的创建对象,没有这个类,没有这个构造方法,也可以通过反射得到对象,通过反射得到Class对象,调用它的构造方法得到对象

我们现在需要一个类 class  由于接口不能创建构造方法,所以我们需要根据接口的class来克隆/生成一个类的class,这个类的classs是构造方法的class根据  根据接口的class对象生成类的class对象,这个类的class对象复制了接口的所有的方法,同时他又有构造方法。


http://www.niftyadmin.cn/n/5176500.html

相关文章

实施MES管理系统项目的三个重要阶段

在现今这个高速发展的时代,每个企业都追求更高的生产效率和更精准的管理。MES管理系统作为助力企业实现这些目标的重要工具,其实施与运营显得尤为关键。以下是我们在实践中总结出的经验与建议,希望为准备引入MES管理系统的企业提供有价值的参…

Python实现猎人猎物优化算法(HPO)优化XGBoost回归模型(XGBRegressor算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的…

二叉树题目:二叉树最大宽度

文章目录 题目标题和出处难度题目描述要求示例数据范围 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:二叉树最大宽度 出处:662. 二叉树最大宽度 难度 5 级 题目描述 要求 给定一个二叉树的根结点 …

【南风法则】温情扑面胜于严酷待人

🚀Solar energy takes off your coat faster than wind - a kind and friendly way is easier to change someone’s mind than any violence . 🚀 太阳能比风更快地脱下你的大衣——仁厚、友善的方式比任何暴力更容易改变别人的心意 ——美国成功学大师…

MS321V/358V/324V低压、轨到轨输入输出运放

MS321V/MS358V/MS324V 是单个、两个和四个低压轨到轨输 入输出运放,可工作在幅度为 2.7V 到 5V 的单电源或者双电源条件 下。在低电源、空间节省和低成本应用方面是最有效的解决方案。 这些放大器专门设计为低压工作( 2.7V 到 5V )…

将ChatGPT集成在AR中,Snap玩出了新花样!

著名社交媒体平台Snap在官网宣布,在最新的AR开发平台Lens Studio 5.0版本中,集成ChatGPT功能。 在ChatGPT的帮助下,开发人员可以创建更多有趣、科普、对话、创意的Snapchat镜头,例如,通过ChatGPT创建无限测验和随机生…

【10】maven打包报错 spring-boot-maven-plugin 与spring-boot 版本的不一致

报错信息 org/springframework/boot/maven/RepackageMojo has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0 解决方法 是因为pring-boot-mav…

【 OpenGauss源码学习 —— 列存储(CStore)(六)】

列存储(CStore)(六) 概述CStore::GetCUDataFromRemote 函数CStore::CheckConsistenceOfCUDescCtl 函数CStore::CheckConsistenceOfCUDesc 函数CStore::CheckConsistenceOfCUData 函数额外补充 声明:本文的部分内容参考…