设计模式 - 代理模式

目录

一. 前言

二. 实现

三. 静态代理和动态代理


一. 前言

    代理模式(Proxy Pattern),为某个对象提供一种代理以控制对对象的访问。即客户端可通过代理对象间接访问目标对象,同时可限制、增强、修改目标对象的一些特性。访问者不想或者不能直接访问目标对象,代理对象作为目标对象和访问者之间的中介。

使用场景:

远程代理(Remote Proxy):控制对远程对象(不同地址空间)的访问,它负责将请求及其参数进行编码,并向不同地址空间中的对象发送已经编码的请求。
虚拟代理(Virtual Proxy):根据需要创建开销很大的对象,它可以缓存实体的附加信息,以便延迟对它的访问,例如在网站加载一个很大的图片时,不能马上完成,可以用虚拟代理缓存图片的大小信息,然后生成一张临时图片代替原始图片。
保护代理(Protection Proxy):按权限控制对象的访问,它负责检查调用者是否具有实现一个请求所必须的访问权限。
智能代理(Smart Reference):取代了简单的指针,它在访问对象时执行一些附加操作: 记录对象的引用次数;当第一次引用一个持久化对象时,将它装入内存;在访问一个实际对象前,检查是否已经锁定了它,以确保其它对象不能改变它。

二. 实现

抽象目标(Subject):定义目标对象的行为。
具体目标(RealSubject):实现抽象目标,实现其具体行为。
代理类(Proxy):实现抽象目标,拥有对具体目标的引用,同时可对目标对象进行增强处理。

public interface Subject {/*** 定义目标类行为*/void behavior();
}
public class RealSubject implements Subject {@Overridepublic void behavior() {System.out.println("我是真实对象");}
}
public class Proxy implements Subject {private Subject targetObject = new TargetSubject();@Overridepublic void behavior() {System.out.println("前置加强处理");this.targetObject.behavior();System.out.println("后置加强处理");}
}
public class Client {public static void main(String[] args) {Subject proxy = new Proxy();proxy.behavior();}
}
前置加强处理
我是真实对象
后置加强处理

三. 静态代理和动态代理

    代理模式共有两类三种实现方式,即静态代理和动态代理,同时动态代理可以使用 jdk 动态代理和 cglib 动态代理实现。

静态代理:代理类在编译期生成。
动态代理:代理类在运行期生成。
jdk 动态代理:
Java.lang.reflect 包中的 proxy 类和 InvocationHandler 接口提供了生成代理类的功能。jdk 动态代理有一个限制,那就是代理目标类必须实现一个或多个接口。

cglib 动态代理:
cglib 是一个强大的高性能代码生成包,它可以在运行时扩展 java 类或实现 java 接口。被广泛应用于许多 aop 框架,如 spring aop 和 dynaop。其底层使用一个小而快的字节码处理框架 ASM,通过 asm 来转换字节码并生成类。

jdk 动态代理与 cglib 动态代理区别:
使用 jdk 代理的目标类必须实现一个或多个接口。
使用 cglib 代理的目标类则无需实现,但其不能被 final 修饰,因为其运用了继承关系。
jdk 1.8 以后 jdk 动态代理效率要高于 cglib。

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

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

相关文章

KF32A学习笔记(一):工程导入、编译烧录方法(KF32 IDE+ KF32 PRO)

目录 概述KF32 IDE打开现有项目工程1.工程导入2.编译工程3.下载程序 KF32 PRO 概述 本文主要是对KF32A150芯片程序的编译、烧录方法进行说明。针对开发过程中的编译烧录和无代码情况下的烧录两种场景,需要安装ChipON PRO KF32和ChipON IDE KF32两个上位机工具&…

华为云智能化组装式交付方案 ——金融级PaaS业务洞察及Web3实践的卓越贡献

伴随信息技术与金融业务加速的融合,企业应用服务平台(PaaS)已从幕后走向台前,成为推动行业数字化转型的关键力量。此背景下,华为云PaaS智能化组装式交付方案闪耀全场,在近日结束的华为全联接大会 2023上倍受…

vue若依前端项目搭建

1.项目搭建 首先进入到你需要创建的项目目录下面,然后输入命令vue create .创建项目 接下来选择手动搭建,然后把下面图片中的内容选上 再然后继续配置一些参数信息 接下来运行npm run serve项目就启动起来了 2.配置登录界面文件 首先修改src/router…

数据分享|R语言逻辑回归、线性判别分析LDA、GAM、MARS、KNN、QDA、决策树、随机森林、SVM分类葡萄酒交叉验证ROC...

全文链接:http://tecdat.cn/?p27384 在本文中,数据包含有关葡萄牙“Vinho Verde”葡萄酒的信息(点击文末“阅读原文”获取完整代码数据)。 介绍 该数据集(查看文末了解数据获取方式)有1599个观测值和12个变量&#xf…

使用EPPlus实现C#控件Excel文件内容导入转换

使用EPPlus实现C#控件Excel文件内容导入转换 1.添加EPPlus库 在使用EPPlus库时,你需要确保在项目中添加了正确的引用。你可以通过以下方式添加引用: 打开你的项目。 在“解决方案资源管理器”中,右键单击“引用”并选择“管理NuGet程序包”…

作为一名独立开发者,如何获取客户?

很多程序员想成为一名独立开发者,从事自由职业,最大的困难在于如何赚钱,进一步来说,就是如何找到自己的客户,有很多开发者拥有丰富的经验,优秀的能力,但无法吸引客户。这篇文章的灵感正是为此而…

Python实现猎人猎物优化算法(HPO)优化随机森林回归模型(RandomForestRegressor算法)项目实战

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

一创聚宽的实盘就要关闭了,有没有好用的实盘平台推荐

挺多的,比较普遍的是QMT和Ptrade,python语言,易上手,通用性好,要说适用性可以考虑Ptrade,问一下你的客户经理有没有,用Ptrade的券商也多,如果之前用一创聚宽你可以无缝切换&#xff…

单链表详细解析|画图理解

前言: 在前面我们学习了顺序表,相当于数据结构的凉菜,今天我们正式开始数据结构的硬菜了,那就是链表,链表有多种结构,但我们实际中最常用的还是无头单向非循环链表和带头双向循环链表,我们今天先…

ELF文件结构

目录 ELF文件类型 ELF文件结构 通过链接视角分析目标文件 ELF文件头(ELF Header) 节头表 .text代码节 .data 数据节 .rodata 只读数据节 .bss节 其他常见的节 字符串节 符号表 重定位表 通过运行视角分析目标文件 本节内容: ELF文件类型ELF文件结构 …

san.js源码解读之工具(util)篇——splitStr2Obj函数

一、 源码解析 /*** 将字符串逗号切分返回对象** param {string} source 源字符串* return {Object}*/ function splitStr2Obj(source) {var result {};each( // 2source.split(,), // 1function (key) { // 3result[key] key;});return result; }把字符串通过 split 函数以…

【AI视野·今日Robot 机器人论文速览 第三十六期】Tue, 19 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Tue, 19 Sep 2023 (showing first 100 of 112 entries) Totally 112 papers 👉上期速览✈更多精彩请移步主页 Interesting: 📚In-Hand Object Rotation, RotateIt 提出了一种基于视觉与触觉的物体旋转朝向的方法…

一文了解优先考虑结果的以「意图」为中心的 Intent-Centric 架构

Web3 用户体验成是阻碍区块链被大规模采用的原因之一,而 Intent-Centric 架构形式极大简化了用户的体验门槛。 Ac-Core:实现意图所需元素:1)账户抽象:利用捆绑器加代付合约完成适合开发者的狭义意图;2&…

【萌新的RiscV学习之流水线结构的概述-7】

萌新的RiscV学习之流水线结构的概述-7 之前写完了单周期的指令 目前朝着流水线迈进 由于涉及学业机密 就不展示代码了 主要展示学习过程和一些想法 由于时钟周期必须满足所有指令中最坏的情况,所以不能使用那些缩短常用指令执行时间而不改变最坏情况的实现技术。因…

链表(单链表、双链表)

前言:链表是算法中比较难理解的部分,本博客记录单链表、双链表学习,理解节点和指针的使用,主要内容包括:使用python创建链表、实现链表常见的操作。 目录 单链表 双链表 单链表 引入链表的背景: 先来看…

2023年最新电商某东app端sign签名算法与cipher加解密逆向分析(2023-09-26)

前言: 本文仅供学习交流,只提供关键思路不会给出完整代码,严禁用于非法用途,若有侵权请联系我删除!技术交流合作请私信! 一.工具的选择(抓包工具的选择,是门学问) 用…

Android存储权限完美适配(Android11及以上适配)

一、Bug简述 一个很普通的需求,需要下载图片到本地,我的三个测试机(荣耀Android10,红米 11 和小米Android 13都没有问题)。 然后,主角登场了,测试的三星Android 13 死活拉不起存储权限弹窗。 …

深入理解红黑树

小白慎入!本文难度比较高,需要对红黑树有一定的了解再来看! 红黑树 红黑树是一种高级数据结构,是平衡树大家族中的一员,并且听名字就知道这个玩意不是凡物,可能你从未听过,但是你一定会为这样的…

华为OD七日集训第6期 十一特辑 - 按算法分类,由易到难,循序渐进,玩转OD

目录 专栏导读华为OD机试算法题太多了,知识点繁杂,如何刷题更有效率呢? 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、优先队列4、滑动窗口5、二叉树6、并查集7、栈 三、算法1、基础算法① 贪心算法② 二分查找③ 分治…

大咖共探AGI时代机遇,腾讯云助力大模型规模化应用提速

引言 2023 年,科技圈的“顶流”莫过于大模型。自 ChatGPT 的问世拉开大模型与生成式 AI 产业的发展序幕后,国内大模型快速跟进,已完成从技术到产品、再到商业的阶段跨越,并深入垂直行业领域。 新技术的爆发,催生新的应…