Java中的代理设计模式

代理对象或代理对象为另一个对象提供占位符,以控制对该对象的访问。 代理充当原始对象的轻量级版本或简化版本。 它支持与原始对象相同的操作,但可以将那些请求委托给原始对象以实现它们。

代理设计模式是一种结构模式,其中代理类包装了实际的主题类。 客户代码仅与代理类交互,而不与真实主题交互。

在本教程中,我们将学习如何实现代理设计模式。

为什么要使用代理?

在三种最常见的情况下,我们可能需要代理类:

  1. 虚拟代理:当主题实例化需要大量资源时,我们可以选择使用此模式。 我们在此处创建的代理类称为虚拟代理。 一些示例用例将包括在网页上加载非常高分辨率的图像。 想法是将昂贵的资源的创建延迟到需要的时间为止
  2. 保护代理:我们还可以使用代理类来控制对真实主题类的访问。 例如,允许用户根据其特定用户角色访问网站
  3. 远程代理:此实现的真实示例是Google Docs。 Web浏览器将代理对象保存在本地,然后与远程服务器上的对象同步

UML图:

代理设计模式包含以下组件:

  • 主题:定义实际主题合同的接口
  • RealSubject这是我们要为其提供代理的类
  • 代理:这是真实主题的代理类。 ProxyRealSubject类均实现Subject接口
  • 客户端通过Subject接口与代理交互的类

ProxyRealSubject类均实现Subject接口。 同样,客户端与Subject界面进行交互,因此它隐藏了客户端与代理进行交互而不是真实主题的事实。

代理类包装实际主题,并且可以将一些请求委托给真实主题。 但是,并非所有请求都委托给Subject类 代理能够处理一些较轻的职责。

示例实现:

大多数组织在其场所内提供受限的Internet访问权限。 那么,如何实施呢?

这个想法是创建一个保护代理。

让我们先定义一个WebServer接口:

 public interface WebServer { void makeRequest(String url);  } 

在这里, makeRequest()方法负责使用特定端点对Web服务器进行调用。

现在,让我们实现RealWebServer类,该类完成通过网络API调用命中URL的实际工作:

 public class RealWebServer implements WebServer {     @Override public void makeRequest(String url) { //code to hit a particular url }  } 

最后,我们将创建一个代理服务器并将其公开给我们的客户:

 public class ProxyServer implements WebServer {  private RealWebServer realServer; private List<String> blockedSites = new ArrayList<>();  public ProxyWebServer() { this .realServer = new RealWebServer(); } RealWebServer(); }  public void blockWebsite(String url) { this .blockedSites.add(url); }  @Override public void makeRequest(String url) { if (!blockedSites.contains(url)) { this .realServer.makeRequest(url); } else { System.out.println( "This website is blocked. Contact your administrator" ); } }  } 

这样一来,所有被阻止的网站将在场所内不可用:

 //code in main method  WebServer server = new ProxyWebServer();  server.blockWebsite( "www.facebook.com" );  ...  server.makeRequest( "www.facebook.com" ); // Prints 'This website is blocked. Contact your administrator' 

结论:

在本教程中,我们探讨了代理设计模式。

代理模式使我们可以推迟创建昂贵的资源,直到需要它为止,控制对真实主题的访问或在本地表示远程对象。

Java Reflection API依赖于代理。 同样,Hibernate的惰性获取逻辑在内部使用了这种模式。

翻译自: https://www.javacodegeeks.com/2019/09/proxy-design-pattern-java.html

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

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

相关文章

光模块简介、结构介绍及分类详解

光模块(optical module)由光电子器件、功能电路和光接口等组成&#xff0c;光电子器件包括发射和接收两部分。简单的说&#xff0c;光模块的作用就是光电转换&#xff0c;发送端把电信号转换成光信号&#xff0c;通过光纤传送后&#xff0c;接收端再把光信号转换成电信号。接下…

光模块是怎么分类的?光模块的应用及作用有哪些?

光模块是进行光电和电光转换的光电子器件。光模块的发送端把电信号转换为光信号&#xff0c;接收端把光信号转换为电信号。光模块按照封装形式分类&#xff0c;常见的有SFP&#xff0c;SFP&#xff0c;SFF&#xff0c;千兆以太网路界面转换器&#xff08;GBIC&#xff09;等。那…

仿制药名言_仿制药的美丽与陌生

仿制药名言最近&#xff0c;我正在为Oracle认证专家Java SE 7程序员考试做准备&#xff0c;而我恰巧在Java泛型领域遇到了一些看起来很奇怪的构造。 但是&#xff0c;我也看到了一些巧妙而优雅的代码。 我发现这些示例值得分享&#xff0c;这不仅是因为它们可以使您的设计选择更…

如何区分光猫、路由器和交换机?

如今&#xff0c;网络已经进入了千家万户&#xff0c;上网已成为了我们生活中必不可少的事情。通常&#xff0c;在家里最常见的网络设备有&#xff1a;光猫&#xff08;光调制解调器&#xff09;、路由器、交换机&#xff0c;但很多小白用户并不能轻易区分它们。当遇上网络故障…

Java 12:开关表达式

在Java 12中&#xff0c;对switch语句进行了增强&#xff0c;以便可以将其用作表达式。 现在也可以在一种情况下打开多个常量&#xff0c;从而使代码更简洁易读。 这些增强是预览语言功能 &#xff0c;这意味着必须使用--enable-preview标志在Java编译器和运行时中显式启用它们…

什么是网络延长器?

网络延长器就是能够把网络传输距离有效延长的设备&#xff0c;网络延长器能够突破传统以太网传输距离100米以内的限制&#xff0c;可以通过双绞线将100M网络传输500米&#xff0c;10M网络传输1500米甚至更长。它将网络的传输距离的极限从铜线的100米扩展到千米以上&#xff0c;…

什么是延长器?延长器常见类型介绍

延长器是用来延长信号的器件&#xff0c;通常用于长距离直连线材无法满足传输要求的情况&#xff0c;一般是为了确保信号长距离无衰减的传输而设计&#xff0c;因此多是有源的。那么&#xff0c;什么是延长器&#xff1f;延长器的常见类型有哪些呢&#xff1f;接下来我们就一起…

solr 模糊匹配_Solr中的前缀和后缀匹配

solr 模糊匹配搜索引擎都是关于查找字符串的。 用户输入一个查询词&#xff0c;然后从反向索引中检索它。 有时&#xff0c;用户正在寻找的值只是索引中值的子字符串&#xff0c;并且用户可能也对这些匹配感兴趣。 对于德语这样的包含复合词&#xff08;如Semmelkndel&#xff…

视频编解码器常见问题介绍

视频编解码器&#xff0c;是指一个能够对数字视频进行压缩或者解压缩的程序或者设备。通常这种压缩属于有损数据压缩。历史上&#xff0c;视频信号是以模拟形式存储在磁带上的。那么&#xff0c;我们在使用视频编解码器的过程中遇到的一些常见问题有哪些呢&#xff1f;接下来我…

Java中的双重检查锁定

在本文中&#xff0c;我们将介绍在RxJava中创建Singleton对象的一些技术。 最重要的是&#xff0c;我们将学习Java中的双重检查锁定 。 Java中的Singleton模式是一种创新模式。 随着时间的流逝&#xff0c;人们开始关注Singleton模式的使用和实现。 这是由于单例的实现和使用方…

视频干扰的原因及解决方法

我们在视频监控和视频传输会议中常常会遇到视频信号被干扰的困扰&#xff0c;由于视频干扰产生画面抖动、显示模糊等显示问题&#xff0c;严重影响使用效果。那么这些干扰信号时如何产生的&#xff0c;又该如何解决呢&#xff1f;接下来我们就跟随飞畅科技的小编一起来详细了解…

网络监控系统安装的4种方式,安防必备

现如今&#xff0c;随着人们安防意识的提高&#xff0c;监控从业人员也越来越多。对于刚刚加入这个行业的新人来讲&#xff0c;可能首先要从最基层的监控设备安装做起。只有在实践中不断积累经验技术&#xff0c;才有可能独当一面、快速成长。作为一名新手&#xff0c;网络监控…

it编年史_Java的编年史和低延迟

it编年史总览 我正在看Typesafe的Rolan Kuhn在介绍React流方面的精彩演讲&#xff0c;乍一看似乎与《纪事报》有一些相似的目标&#xff0c;但是当您深入研究细节时&#xff0c;很明显我有一些关键的假设根本不同。 关键假设 《纪事》设计的主要假设是 低延迟是您的问题&#…

智慧磐石工程项目系统组成

武警部队智慧磐石工程以五防一体化建设为基础&#xff0c;融入各类前沿智能检测、识别、控制等相关技术&#xff0c;通过整合指挥、监控、防护、报警、通信、处置要素&#xff0c;实现信息智能管理、环境智能分析、通道智能防范、监控智能识别、险情智能感知、枪弹智能管控、情…

网络延长器分为哪几类?其应用领域有哪些?

网络延长器具有超低传输时延&#xff0c;能够线速转发数据包。网络延长器采用自主产权的LRE&#xff08;Long- Reacher Ethernet&#xff09;长线以太网驱动技术&#xff0c;能有效延长以太网传输距离达700米&#xff0c;同时保障最大传输带宽。基本原理是通过信号整形放大&…

Java项目:书评

本文是关于这本书的 Peter Verhas撰写的Java Projects Second Edition 我去年写的 这样一篇文章的目的通常是为了促进这本书的销售。 在这种情况下没有什么不同&#xff0c;但是由于这是我写的书&#xff0c;而且我是撰写评论的人&#xff0c;因此赞美这本书将非常尴尬。 所以…

信号延长器常见故障问题及解决方案汇总

延长器是用来延长信号的器件&#xff0c;通常用于长距离直连线材无法满足传输要求的情况&#xff0c;一般是为了确保信号长距离无衰减的传输而设计&#xff0c;因此多是有源的。我们在使用信号延长器的过程中难免会遇到各种各样的故障问题&#xff0c;那么我们该如何解决呢&…

一文读懂视频监控系统全过程内容

视频监控系统由实时控制系统、监视系统及管理信息系统组成。视频监控系统是安全防范系统的组成部分&#xff0c;它是一种防范能力较强的综合系统。视频监控以其直观、方便、信息内容丰富而广泛应用于许多场合。接下来就由飞畅科技来为大家详细介绍下视频监控系统的全过程&#…

以太网识别标准及接线标准、接线方法详解

以太网是目前应用最普遍的局域网技术&#xff0c;取代了其他局域网技术如令牌环、FDDI和ARCNET。为了使网络系统中的软硬件设备不受生产厂家和型号等不同的限制&#xff0c;制定了各种各样的标准来保证他们之间的相互通&#xff0c;以太网标准就是其中之一&#xff0c;IEEE组织…

Spring Framework中的作用域代理

Spring框架提供了Spring bean的作用域。 我们可以使用spring范围控制插入Spring bean的各种依赖关系和配置值。 Spring支持以下六个范围。 在基于Web的应用程序中可以使用六个中的四个&#xff1a; 范围 描述 辛格尔顿 它是Spring框架中的默认范围。 对于每个Spring IOC容…