新数据结构(12)——代理
什么是代理
在进行操作时有时不希望用户直接接触到目标,这时需要使用代理让用户间接接触到目标
给目标对象提供一个代理对象,并且由代理对象控制着对目标对象的引用
图解:

代理的目的
控制访问:通过代理对象的方式间接的访问目标对象,防止直接访问目标对象给系统带来不必要的复杂性
功能增强:通过代理业务对原有业务进行增强



静态代理

如下代码是代理实例,并且实现控制访问

实现功能增强

静态代理的缺点:当目标类增多的时候,代理类直接增加代理的目标类,会造成代理逻辑混乱
![]()
动态代理

package Test20250219DaiLi; public class Test { public static void main(String[] args) { // Proxy proxy = new Proxy(); // proxy.clothes("xxxL"); ClothesFactory clothesFactory = new ClothesFactory(); ByClothes clothes = (ByClothes) new DyProxy(clothesFactory).getProxyInterFace(); clothes.clothes("XXXL"); ShootFactory shootFactory = new ShootFactory(); ByShoot shoot= (ByShoot) new DyProxy(shootFactory).getProxyInterFace(); shoot.Shoot("42"); } }
package Test20250219DaiLi; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class DyProxy implements InvocationHandler { //被代理的对象 //代理对象如何得知自己代理的是哪个目标类 //这里这样写其实是让用户告诉我,我要代理谁 private Object o ; public DyProxy(Object o){ this.o = o; } //2.获取目标类的接口,要知道自己代理的核心方法是啥? public Object getProxyInterFace(){ return Proxy.newProxyInstance(o.getClass().getClassLoader(), o.getClass().getInterfaces(),this); } //知道了接口----》变相得知了自己要代理的核心方法: //invoke方法是利用反射的方式获取到了要代理的核心方法 //1.Object:jdk创建的代理类,无需赋值 //2.Method:目标类当中的方法,jdk提供,无需赋值 //3.Object[]:目标类当中的方法的参数,jdk提供,无需赋值 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { FrontService(); method.invoke(o,args); endService(); return null; } //前置服务 public void FrontService() { System.out.println("根据您的需求进行市场调研"); } //前置服务 public void endService() { System.out.println("为您提供一条龙的包办服务"); } }
package Test20250219DaiLi; public interface ByClothes { public abstract void clothes(String size); }
package Test20250219DaiLi; /** * 卖衣服的工厂 * 目标类 */ public class ClothesFactory implements ByClothes{ public void clothes(String size){ System.out.println("已经给您定制好了一件大小为"+size+"的衣服"); } public void 机器处理(){ } public void 原材料(){} }

相关文章:
新数据结构(12)——代理
什么是代理 在进行操作时有时不希望用户直接接触到目标,这时需要使用代理让用户间接接触到目标 给目标对象提供一个代理对象,并且由代理对象控制着对目标对象的引用 图解: 代理的目的 控制访问:通过代理对象的方式间接的访问目…...
记一次一波三折的众测SRC经历
视频教程和更多福利在我主页简介或专栏里 (不懂都可以来问我 专栏找我哦) 目录: 前言 波折一:RCE漏洞利用失败 波折二:SQL时间盲注 波折三:寻找管理后台 总结 前言 先谈个人SRC心得体会吧,我虽…...
Laravel从入门到上云
大家好,今天给大家介绍一下PHP的经典框架Laravel。 本文假定你已经安装好了PHP执行环境,并且使用PHP版本为PHP8.0以上。 首先,让我们来安装Laravel框架,执行命令:composer create-project laravel/laravel 命令执行…...
【小游戏】C++控制台版本俄罗斯轮盘赌
制作团队:洛谷813622(Igallta) 989571(_ayaka_) Mod:_ayaka_ 双人模式:Igallta 公告: 原先的9.8改名为 Alpha 1.0,以后每次更新都增加 0.1。 Alpha 1.11 改为 Beta 1…...
【前端】使用WebStorm创建第一个项目
文章目录 前言一、步骤1、启动2、创建项目3、配置Node.js4、运行项目 二、Node.js介绍 前言 根据前面文章中记录的步骤,已经安装好了WebStorm开发软件,接下来我们就用这个IDE开发软件创建第一个项目。 一、步骤 1、启动 启动软件。 2、创建项目 新建…...
前后端项目部署服务器(传统部署和Docker部署)
内外网 开发环境连外网(8.140.26.187),测试/生产环境连内网(172.20.59.17) 内外网地址不同,但指定的库是同一个 内网IP地址范围包括: 10.0.0.0 到 10.255.255.255172.16.0.0 到 172.31.2551…...
C++,设计模式,【工厂方法模式】
文章目录 如何用汽车生产线理解工厂方法模式?一、传统生产方式的困境二、工厂方法模式解决方案三、模式应用场景四、模式优势分析五、现实应用启示✅C++,设计模式,【目录篇】 如何用汽车生产线理解工厂方法模式? 某个早晨,某车企CEO看着会议室里堆积如面的新车订单皱起眉…...
golang--字符串处理(rune类型)
在 Go 语言中,rune 类型是一个非常重要的基础类型,用于处理 Unicode 字符。以下是关于 rune 类型的详细用法说明: 一、基础概念 类型定义 rune 是 int32 的别名(type rune int32),表示一个 Unicode 码点&a…...
如何通过AI优化敏捷开发中的任务管理与分配?
用ChatGPT做软件测试 在现代软件开发中,敏捷开发(Agile)已成为一种广泛采用的开发方法论,其核心思想是强调快速响应变化、与客户的持续沟通以及团队协作的高效性。然而,随着项目规模的不断扩大,敏捷开发面临…...
第1章大型互联网公司的基础架构——1.11 消息中间件技术
消息队列(Message Queue)是分布式系统中最重要的中间件之一,在服务架构设计中被广泛使用。 1.11.1 通信模式与用途 消息中间件构建了这样的通信模式: 一条消息由生产者创建,并被投递到存放消息的队列中;…...
FlutterAssetsGenerator插件的使用
在Plugins中找到FlutterAssetsGenerator插件,点击安装。 更改生成的资源索引类可以修改名字。 在根目录下创建assets/images文件夹,用于存储图片。 点击images文件夹,鼠标右键点击Flutter:Configuring Paths,pub…...
EasyExcel 自定义头信息导出
需求:需要在导出 excel时,合并单元格自定义头信息(动态生成),然后才是字段列表头即导出数据。 EasyExcel - 使用table去写入:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write#%E4%BD%BF%E7%94%A8table%E…...
网络运维学习笔记 012网工初级(HCIA-Datacom与CCNA-EI)某机构新增:GRE隧道与EBGP实施
文章目录 GRE隧道(通用路由封装,Generic Routing Encapsulation)协议号47实验:思科:开始实施: 华为:开始实施: eBGP实施思科:华为: GRE隧道(通用路…...
【系列专栏】银行IT的云原生架构-存储架构-数据库部署 10
银行 IT 的云原生架构:存储架构(数据库部署) 一、引言 在银行 IT 云原生架构的构建中,存储架构作为关键支撑,其性能、可靠性和扩展性直接影响着银行各类业务系统的运行效率与数据安全。而数据库作为数据存储与管理的…...
Python 爬虫selenium
1.selenium自动化 selenium可以操作浏览器,在浏览器页面上实现:点击、输入、滑动 等操作。 不同于selenium自动化,逆向本质是: 分析请求,例如:请求方法、请求参数、加密方式等。用代码模拟请求去实现同等…...
为啥vue3设计不直接用toRefs,而是reactive+toRefs
Vue 3 设计中将 reactive 和 toRefs 结合使用而非直接使用 toRefs,主要基于以下设计考量: 1. 响应式粒度的不同需求 reactive 适用于对象整体响应式 reactive 会为整个对象创建响应式代理,自动追踪对象内部所有属性的变化。这种设计适用于需要…...
深入解析 vLLM:高性能 LLM 服务框架的架构之美(二)调度管理
深入解析 vLLM:高性能 LLM 服务框架的架构之美(一)原理与解析 深入解析 vLLM:高性能 LLM 服务框架的架构之美(二)调度管理 1. vLLM 调度器结构与主要组件 在 vLLM 中,调度器的结构设计围绕任务…...
VMware安装教程
一、安装VMware软件 1. 安装前准备 系统要求: 操作系统:Windows 10/11 或 Linux(如Ubuntu、CentOS)。硬件要求: CPU:支持虚拟化技术(Intel VT-x 或 AMD-V),需在BIOS中启…...
iOS事件传递和响应
背景 对于身处中小公司且业务不怎么复杂的程序员来说,很多技术不常用,你可能看过很多遍也都大致了解,但是实际让你讲,不一定讲的清楚。你可能说,我以独当一面,应对自如了,但是技术的知识甚多&a…...
TensorFlow 实现任意风格的快速风格转换
一、什么是风格迁移? 风格迁移(Style Transfer)是一种利用深度学习技术,将一幅图像的内容与另一幅图像的艺术风格相结合,生成新图像的技术。其核心思想是将图像的“内容”和“风格”分离,再重新组合&#…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...
海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》
近日,嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,海云安高敏捷信创白盒(SCAP)成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解…...
Oracle实用参考(13)——Oracle for Linux物理DG环境搭建(2)
13.2. Oracle for Linux物理DG环境搭建 Oracle 数据库的DataGuard技术方案,业界也称为DG,其在数据库高可用、容灾及负载分离等方面,都有着非常广泛的应用,对此,前面相关章节已做过较为详尽的讲解,此处不再赘述。 需要说明的是, DG方案又分为物理DG和逻辑DG,两者的搭建…...
代理服务器-LVS的3种模式与调度算法
作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们上一章介绍了Web服务器,其中以Nginx为主,本章我们来讲解几个代理软件:…...
如何使用CodeRider插件在IDEA中生成代码
一、环境搭建与插件安装 1.1 环境准备 名称要求说明操作系统Windows 11JetBrains IDEIntelliJ IDEA 2025.1.1.1 (Community Edition)硬件配置推荐16GB内存50GB磁盘空间 1.2 插件安装流程 步骤1:市场安装 打开IDEA,进入File → Settings → Plugins搜…...
ubuntu系统 | docker+dify+ollama+deepseek搭建本地应用
1、docker 介绍与安装 docker安装:1、Ubuntu系统安装docker_ubuntu docker run-CSDN博客 docker介绍及镜像源配置:2、ubuntu系统docker介绍及镜像源和仓库配置-CSDN博客 docker常用命令:3、ubuntu系统docker常用命令-CSDN博客 docker compose安装:4、docker compose-CS…...
关于智能体API参考接口
关于智能体在Flask的源码:请求体(在payload里的是请求体)、请求头(在headers里的i局势请求头)。 我的例子: 我的疑问:为什么没按Coze官方API文档格式,在Apifox里发POST请求却能收到回复? 1. 你…...
感谢阿里云RDS产品及时的“光速服务”
❝ 开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共3000人左右…...
