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,一经查实,立即删除!

相关文章

什么是网络延长器?

网络延长器就是能够把网络传输距离有效延长的设备&#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…

Java中的双重检查锁定

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

Java项目:书评

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

串口转换器的工作方式及通讯模式介绍

串口转换器能让您在配有RS-232的系统上使用RS-422及RS-485。它透明地将RS-232信号转成隔离的RS-422或RS-485信号。对此&#xff0c;您无需改变PC机任何的硬件或软件就能让您利用标准的PC硬件&#xff0c;来轻松构建一个工业级的长距离通信系统&#xff1b;基于TCP/IP和RS-485/4…

RS-232/E1协议转换器产品介绍

RS-232/E1协议转换器是我公司自主研发生产的高性能产品&#xff0c;它将透明E1转换为V.35或者RS232的异步数据接口的接口转换设备&#xff0c;本设备V.35接口可以连接DCE或DTE两种工作方式的设备&#xff0c;RS232接口只支持异步RS232数据&#xff0c;可支持的最高异步速率为11…

java ee cdi_Java EE CDI限定词:快速浏览

java ee cdi在上下文和依赖注入&#xff08;CDI&#xff09;中&#xff0c; 限定符是类型安全和松散耦合的主体。 为什么&#xff1f; 没有CDI&#xff0c;我们将以类似于下面的方式注入Java EE组件 注意&#xff1a;这实际上不会编译&#xff0c;只是假设的代码片段 例子1 …

什么是串口协议转换器?串口转换器有哪些特点?

串口转换器是为RS-232/485/422到TCP/IP之间完成数据转换的通讯接口转换器。通过作为服务器端&#xff0c;提供RS-232/485/422终端串口与TCP/IP网络的数据双向透明传输&#xff0c;提供串口转网络功能&#xff0c;RS-232/485/422转网络的解决方案&#xff0c;可以让串口设备立即…

485转232转换器产品介绍及性能参数介绍

配有不同标准串行接口的计算机、外部设备或智能仪器之间进行远程数据通信&#xff0c;需要进行标准串行接口的相互转换。485转换器将单端的RS-232信号转换为平衡差分的RS-485或RS-422信号。RS-485、RS-422自动识别功能&#xff0c;使用更加简单。接下来我们就来为大家详细介绍下…

什么是RS232/RS485转换器?

485转以太网提供串口转网络功能&#xff0c;能够将RS-232/485/422串口转换成TCP/IP网络接口&#xff0c;实现RS-232/485/422串口与TCP/IP网络接口的数据双向透明传输。使得串口设备能够立即具备TCP/IP网络接口功能&#xff0c;连接网络进行数据通信&#xff0c;极大的扩展串口设…

E1协议转换器使用中常见故障问题及处理方法总结

E1协议转换器也叫接口转换器&#xff0c;是实现数据通信网以太网接口与光纤通信传送网E1接口连接时进行两种接口转换的设备。广泛应用在传输站E1接口与网络交换机相连时的接口转换中。现飞畅科技小编对其使用过程中常见故障及解决方法进行归纳&#xff0c;希望对大家在应用此类…

RS485转换器常见问题总结

通讯转换器主要应用于支持RS485通讯总线结构的工业控制自动化系统&#xff0c;其中包括一卡通、门禁系统、消费系统、考勤系统、、监控、楼宇对讲、停车场系统、自助银行系统、公共汽车收费系统、公路收费站系统等等。但是&#xff0c;我们在使用485转换器的过程中难免会遇到各…

注释处理和JPMS

TLDR&#xff1b; 代替annotation.getClass().getMethod("value")调用annotation.annotationType().getMethod("value") 。 所有Java开发人员都听说过注释。 自Java 1.5&#xff08;或者您坚持认为只有1.6&#xff09;以来&#xff0c;我们便有了注释。 根…

Cassandra中的数据建模

在关系数据模型中&#xff0c;我们为域中的每个对象建模关系/表。 对于Cassandra&#xff0c;情况并非如此。本文将详细介绍在Cassandra中进行数据建模时需要考虑的所有方面。 以下是Cassandra数据建模的粗略概述。 从上图可以看出&#xff0c; 概念数据建模和应用程序查询是构…

485串口光纤转换器产品介绍

光纤转换器是RS-232/422/485串行数据通过光纤的远距离传输&#xff0c;可以完成串口到光纤的转换&#xff0c;并且可以延长串行通信信号的传输距离。接下来我们就跟随飞畅科技的小编一起来详细了解下光纤转换器的转换类别有哪些&#xff1f;一起来看看吧&#xff01; 光纤转换器…

什么是485转光纤?485光纤转换器功能特点及技术参数详解

RS485转光纤转换器实现一路RS-485在光纤上的透明传输&#xff0c;由于采用光纤通信&#xff0c;解决了电磁干扰、地环干扰和雷电破坏的难题&#xff0c;大大提高了数据通讯的可靠性、安全性和保密性&#xff0c;可广泛用于各种工业控制、过程控制、交通控制和分布式数据采集等场…

什么是协议转换器?协议转换器的定义

现如今&#xff0c;随着各种类型的转换器的出现&#xff0c;在很大程度上扩大了各类仪表的使用范围&#xff0c;使的自动控制系统具有更多的灵活性和更广的适应性&#xff0c;在这方面&#xff0c;协议转换器的应用范围也是非常的广泛。今天&#xff0c;杭州飞畅的小编就来为大…

什么是网络协议转换器?

通过之前的介绍&#xff0c;我们了解到协议转换是一种映射&#xff0c;就是把某一协议的收发信息(或事件)序列映射为另一协议的收发信息序列。那么&#xff0c;什么是网络协议转换器呢&#xff1f;接下来就跟随飞畅科技的小编一起来看看吧&#xff01; 网络协议转换器是什么&a…

midlet_如何在J2ME中创建MIDlet

midlet总览 Java移动应用程序称为J2ME。 通常&#xff0c;当我们在移动技术领域工作时&#xff0c;我们必须考虑J2ME应用程序。 通过这种方式&#xff0c;我们可以开发我们的移动应用程序&#xff0c;也可以通过jad或jar文件将其安装在我们的设备中。 近年来&#xff0c;手机开…