邯郸网站建设浩森宇特外贸网站建站n

news/2025/10/5 8:46:36/文章来源:
邯郸网站建设浩森宇特,外贸网站建站n,网站建设与管理心得体会和总结,机关网站建设制度代理模式是一种结构型设计模式#xff0c;让开发者能够提供对象的替代品或其占位符。代理对象控制着对于原对象的访问#xff0c;并允许在将请求提交给原对象前后进行一些处理。代理模式为原对象提供一种代理以控制对这个对象的访问#xff0c;并由代理对象控制对原对象的引…代理模式是一种结构型设计模式让开发者能够提供对象的替代品或其占位符。代理对象控制着对于原对象的访问并允许在将请求提交给原对象前后进行一些处理。代理模式为原对象提供一种代理以控制对这个对象的访问并由代理对象控制对原对象的引用。 Proxy is a structural design pattern that lets you provide a substitute or placeholder for another object. A proxy controls access to the original object, allowing you to perform something either before or after the request gets through to the original object.结构设计 为使用代理对象控制对某个对象(Real Subject)的访问可以创建一个代理(Proxy)并封装对源对象的访问。为保证代理和这个对象的接口一致还需提取公共接口(Subject)这样在任何需要控制这个对象的访问的地方都可使用代理实现。代理模式包含如下角色 Subject抽象对象声明了对象接口。代理必须遵循该接口才能伪装成原对象。 Real Subject真实对象实现了对象接口。 Proxy代理类包含一个指向服务对象的引用成员变量。代理完成其任务如延迟初始化、记录日志、访问控制和缓存等后会将请求传递给服务对象。 代理模式类图表示如下 伪代码实现 接下来将使用代码介绍下代理模式的实现。 // 1、抽象对象对接口进行声明 public interface Subject {void operation(); }// 2、真实对象实现了接口 public class RealSubject implements Subject {Overridepublic void operation() {System.out.println(---------do some thing in a real subject instance---------);} }// 3、代理类包含一个指向代理对象的引用成员变量 public class Proxy implements Subject {private RealSubject realSubject new RealSubject();Overridepublic void operation() {preOperation();realSubject.operation();afterOperation();}public void preOperation() {System.out.println(pre operation in the proxy);}public void afterOperation() {System.out.println(after operation in the proxy);} }// 4、客户端调用 public class ProxyClient {public void test(){// (1) 声明接口并实例化代理类Subject subjectProxy new Proxy();// (2) 调用对象接口subjectProxy.operation();} }注意 (1) 尽管可以提供一个公共接口供代理和对象使用但是更多的情况是这个对象的实现和代理的实现是两个不同的人或部门开发。一种可能的情况是开发代理类的是客户端开发人员而开发服务器端类的服务器端开发人员。所以代理和这个对象的公共接口可能并不会被创建。(无法完全做到面向接口编程) (2) 如果Proxy不需要知道待控制访问的对象的类型则可使用统一的接口处理代理而不需要为每个待控制访问的对象创建Proxy。 适用场景 在以下情况下可以考虑使用代理模式 (1) 远程代理。本地执行远程服务适用于服务对象位于服务器(本地服务器或远程服务器)上的情形。在这种情形中代理通过网络传递客户端请求负责处理所有与网络相关的复杂细节。 (2) 虚拟代理。如果需要创建一个资源消耗较大的对象一直保持该对象运行会消耗系统资源。可以先创建一个消耗相对较小的对象来表示真实对象只在需要时才会被真正创建。虚拟代理是一种延迟初始化实现无需在程序启动时就创建该对象可将对象的初始化延迟到真正有需要的时候。 (3) Copy-on-Write代理。它是虚拟代理的一种实现把克隆对象的操作延迟到只有在客户端真正需要时才执行。一般来说对象的深克隆是一个开销较大的操作Copy-on-Write代理可以让这个操作延迟只有对象被用到的时候才被克隆。 (4) 保护代理。该代理控制对一个对象的访问可以给不同的用户提供不同级别的使用权限。如果只希望特定用户使用服务对象可考虑使用代理模式。 (5) 缓存代理。为某一个目标操作的结果提供临时的存储空间以便多个客户端可以共享这些结果。适用于需要缓存客户请求结果并对缓存生命周期进行管理时 特别是当返回结果的体积非常大时。 (6) 日志记录代理。当需要保存对于服务对象的请求历史记录时代理可以在向服务传递请求前进行记录。 (7) 智能引用。当一个对象被引用时提供一些额外的操作如将此对象被调用的次数记录下来在没有客户端使用某个重量级对象时立即销毁该对象等。 (8) 图片代理。当需要对大图浏览进行控制时可以考虑使用代理模式。用户通过浏览器访问网页时先不加载真实的大图而是通过代理对象的方法来进行处理在代理对象的方法中先使用一个线程向客户端浏览器加载一个小图片然后在后台使用另一个线程来调用大图片的加载方法将大图片加载到客户端。当需要浏览大图片时再将大图片在新网页中显示。如果用户在浏览大图时加载工作还没有完成可以再启动一个线程来显示相应的提示信息。通过代理技术结合多线程编程将真实图片的加载放到后台来操作不影响前台图片的浏览。 (9) 动态代理。动态代理是一种较为高级的代理模式它的典型应用就是Spring AOP。在传统的代理模式中客户端通过Proxy调用RealSubject类的request()方法同时还在代理类中封装了其他方法(如preRequest()和postRequest())可以处理一些其他问题。如果按照这种方法使用代理模式那么真实主题角色必须是事先已经存在的并将其作为代理对象的内部成员属性。如果一个真实主题角色必须对应一个代理主题角色这将导致系统中的类个数急剧增加因此需要想办法减少系统中类的个数此外如何在事先不知道真实主题角色的情况下使用代理主题角色这都是动态代理需要解决的问题。 优缺点 代理模式在访问对象时引入了一定程度的间接性。代理模式有以下优点 (1) 符合开闭原则。可以在不对服务或客户端做出修改的情况下创建新代理。 (2) 隐藏一个对象存在于不同地址空间的事实。如客户端调用服务器端方法使用代理后客户端像调用本地方法一样调用服务器端方法。 (3) 允许在访问一个对象时进行一些额外的处理。如将组合后的数据返回给调用者延迟对象的创建时间对对象进行生命周期管理等。 但是代理模式也存在以下缺点 (1) 服务响应可能会延迟。由于在客户端和真实对象之间增加了代理对象因此有些类型的代理模式可能会造成请求的处理速度变慢。 (2) 代码复杂度上升。实现代理模式需要额外的工作有些代理模式的实现非常复杂(如动态代理)。 参考 《设计模式可复用面向对象软件的基础》 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 著 李英军, 马晓星 等译 https://www.runoob.com/design-pattern/proxy-pattern.html 代理模式 https://www.cnblogs.com/adamjwh/p/9102037.html 简说设计模式——代理模式 https://blog.csdn.net/ShuSheng0007/article/details/80864854 秒懂Java代理与动态代理模式 https://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/proxy.html 代理模式 https://refactoringguru.cn/design-patterns/proxy 代理模式

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

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

相关文章

Linux 的编辑器--vim - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:Java基础(二):八种基本数据类型详解

深入解析:Java基础(二):八种基本数据类型详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

电子商务公司网站设计wordpress标签归档

BeanFactoryPostProcessor和BeanPostProcessor这两个接口都是初始化bean时对外暴露的入口之一,和Aware类似(PS:关于spring的hook可以看看Spring钩子方法和钩子接口的使用详解讲的蛮详细)本文也主要是学习具体的钩子的细节,以便于实…

上海网站建设服务是什么网络企业网站建设方案

👑专栏内容:Java⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、方法的概念1、什么是方法?2、方法的定义3、方法调用的过程 二、方法重载1、重载的概念2、方法签名 在日常生活中…

邯郸专业网站建设报价某qq非主流个性网源码qq空间网站源码dede内核+采集规则

目录 一.部署单体项目 1.远程数据库 1.1远程连接数据库 1.2 新建数据库运行sql文件 2.部署项目到服务器中 3.启动服务器运行 二.部署前后端分离项目 1.远程数据库和部署到服务器 2.利用node环境启动前端项目 3.解决主机无法解析服务器localhost问题 方法一 ​编辑 方法二 一.部…

用什么做视频网站比较好的网站右键禁止

非线性容器实现能快速查找的数据结构,其底层通过 hash 或者红黑树实现,包括 HashMap、HashSet、TreeMap、TreeSet、LightWeightMap、LightWeightSet、PlainArray 七种。非线性容器中的 key 及 value 的类型均满足 ECMA 标准。 HashMap HashMap 可用来存…

越秀凭一己之力打破了行业天花板 - 智慧园区

近几年,房地产市场的供需关系已经发生深刻变化,整个行业都在研究怎么能在营销上作出突围。在这个过程中,数字营销几乎成了必选项。 然而,即使布局了数字营销业务,许多 房企面临的营销困境还是在加深 ,明源君认为…

贷款公司网站模板建app需要多少钱

定义 存储器单位时间内读出/写入的位数或字节数 单位 单位是bps(位/秒)或B/s(字节/秒) 计算公式 基于存储器时频率和数据总线位数的计算方法 公式:带宽 存储器时频率 存储器数据总线位数 / 8 基于存取周期和每…

详细介绍:静态资源js,css免费CDN服务比较

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

如何做qq钓鱼网站深圳网页设计公司在哪

文章首发于公众号「码上GIS」,欢迎关注。文中流向图和城市关系强度图的 ArcMap 10.5 Mxd 工程和数据可在公众号后台回复「190708」和「190709」获取不记得是从哪年开始,每年春运期间,百度都会发布个春运大数据,其中最让人印象深刻…

在AI技术唾手可得的时代,挖掘JavaScript学习资源的新需求成为关键

本文分析了一个广受欢迎的JavaScript学习资源库,该项目系统整理了33个核心JavaScript概念的学习资料,涵盖了从基础数据类型到高级设计模式的完整知识体系,为开发者提供了全面的学习路径和参考资料。a.内容描述核心功…

网站模板网站wordpress手机号网站

前言: 子窗口控件是特殊的子窗口,不需要我们注册窗口类,系统已经注册好了,我们只需要在创建时选择相应的窗口类名。常用的子窗口控件有按钮BUTTON、组合框COMBOBOX、编辑框EDIT、列表框LISTBOX、静态框STATIC、滚动条SCROLLBAR等类…

做生意网站wordpress 栏目页

符号在前就先加/减,符号在后就后加/减 在写代码的过程中,常见的一种情况是需要某个整数类型变量增加 1 或减少 1,Java 提供了一种特殊的运算符,用于这种表达式,叫做自增运算符()和自减运算符&#xff0…

洛谷P9676 [ICPC 2022 Jinan R] Skills

洛谷P9676 [ICPC 2022 Jinan R] Skills P9676 [ICPC 2022 Jinan R] Skills 设计状态时,可以知道要用当前的压掉一维,\(dp_{i,j,0/1/2}\) 表示当前选第 \(0/1/2\) 种,\(i,j\) 表示其余两种的最后选择时间。 如果没有…

微信小程序(uniapp)搭建腾讯云 IM 消息撤回

微信小程序(uniapp)搭建腾讯云 IM 消息撤回2025-10-05 08:13 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…

读人形机器人31未来30年

读人形机器人31未来30年1. 先进的技术前景 1.1. 自主决策与认知计算1.1.1. 预计到2055年,最重大的突破之一将是具备先进自主决策能力的人形机器人的出现1.1.2. 借助认知计算和神经网络架构方面的突破,这些机器人将能…

【java面试】redis篇 - 指南

【java面试】redis篇 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

做推文网站营销型网站建设广告语

简洁的结论: 系统环境 ubuntu22.04 nvidia-535解决方案 删除/etc/X11/xorg.conf 文件 记录一下折腾大半天的问题。 ubuntu系统是22.04,之前使用的时候更新驱动导致桌面崩溃,重新安装桌面安装不上,请IT帮忙,IT一番操作过后也表示…

洛谷P8421 [THUPC 2022 决赛] rsraogps

洛谷P8421 [THUPC 2022 决赛] rsraogps P8421 [THUPC 2022 决赛] rsraogps - 洛谷 因为从一个点最多会变化 \(\log V\) 次(这三种操作都是这样),考虑扫描线,这样每次更新前面答案贡献时,就有可能做到 \(\log V\) …