java设计模式代理模式_Java中的代理设计模式
java设计模式代理模式
代理对象或代理对象为另一个对象提供占位符,以控制对该对象的访问。 代理充当原始对象的轻量级版本或简化版本。 它支持与原始对象相同的操作,但可以将那些请求委托给原始对象以实现它们。
代理设计模式是一种结构模式,其中代理类包装了实际的主题类。 客户代码仅与代理类交互,而不与真实主题交互。
在本教程中,我们将学习如何实现代理设计模式。
为什么要使用代理?
在三种最常见的情况下,我们可能需要代理类:
- 虚拟代理:当主题实例化需要大量资源时,我们可以选择使用此模式。 我们在此处创建的代理类称为虚拟代理。 一些示例用例将包括在网页上加载非常高分辨率的图像。 想法是将昂贵的资源的创建延迟到需要的时间为止
- 保护代理:我们还可以使用代理类来控制对真实主题类的访问。 例如,允许用户根据其特定用户角色访问网站
- 远程代理:此实现的真实示例是Google Docs。 Web浏览器将代理对象保存在本地,然后与远程服务器上的对象同步
UML图:
代理设计模式包含以下组件:
- 主题:定义实际主题合同的接口
- RealSubject :这是我们要为其提供代理的类
- 代理:这是真实主题的代理类。 Proxy和RealSubject类均实现Subject接口
- 客户端 :通过Subject接口与代理交互的类
Proxy和RealSubject类均实现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
java设计模式代理模式
java设计模式代理模式_Java中的代理设计模式相关推荐
- java设计模式 订阅模式_Java中的外观设计模式
java设计模式 订阅模式 立面是指建筑物的外观. 当穿过街道时,我们所看到的只是建筑物的外观. 该工作面抽象了建筑物的所有复杂实现细节. 同样, 外观设计模式旨在为子系统中的一组接口提供统一的接口. ...
- java设计模式 订阅模式_Java中的复合设计模式
java设计模式 订阅模式 当我们必须使用对象的树状分层结构时,复合设计模式非常有用. 它使我们能够统一对待单个对象和对象组成. 它属于结构设计模式的范畴,因为它将对象组合成树形结构以表示部分整个层次 ...
- java设计模式迭代器模式_Java中的迭代器设计模式–示例教程
java设计模式迭代器模式 迭代器模式是一种行为模式,它用于提供遍历一组对象的标准方式. Iterator模式在Java Collection Framework中得到了广泛使用,其中Iterator ...
- java设计模式工厂模式_Java中的工厂设计模式
java设计模式工厂模式 Welcome to the Factory Design Pattern in Java tutorial. Factory Pattern is one of the C ...
- java设计模式工厂模式_Java中的复合设计模式
java设计模式工厂模式 Composite pattern is one of the Structural design pattern. Composite design pattern is ...
- java设计模式工厂模式_Java中的桥梁设计模式
java设计模式工厂模式 Today we will look into Bridge Design Pattern in java. When we have interface hierarchi ...
- java设计模式迭代器模式_Java中的迭代器设计模式
java设计模式迭代器模式 Iterator design pattern in one of the behavioral pattern. Iterator pattern is used to ...
- java设计模式工厂模式_Java中的外观设计模式
java设计模式工厂模式 Facade Design Pattern is one of the Structural design patterns (such as Adapter pattern ...
- java命令模式_Java中的命令设计模式
java命令模式 在本教程中,我们将学习命令模式,这是一种重要的行为设计模式. 它具有一些重要的应用程序,例如在文本编辑器中实现撤消/重做功能. 在命令设计模式中,有一个命令对象位于发送方和接收方对象 ...
最新文章
- quicklook不能预览office_万物皆可格!给空格键施加神奇魔法的神器软件—快速预览工具QuicklookPC软件...
- TongJI Online Judge预赛(2): LOVE LETTER
- OpenYurt:延伸原生 Kubernetes 到边缘场景下的落地实践
- Mysql(12)——inner join的用法
- 一个java文件里面可以写多少个class
- Redis 架构之 cluster
- 斑马打印机怎么打印二维码_简单介绍斑马打印机---GX430t
- numpy教程:基本输入输出和文件输入输出Input and output
- 欧洲冠军联赛决赛结束
- 2 Linux基本命令复习2
- docker阿里云镜像加速器
- python爬取人口数据_爬取人口数据
- 计算机教室简笔画图片大全集,教室场景画简笔画图片精选
- GitLab CI/CD 基础教程(一)
- 【转载】BAPI_GOODSMVT_CREATE FUNCITON FOR MIGO 各种移动类型 源代码参考
- 实体-关系图转换为关系模型
- 用旧平板打造家庭云数码相框
- idea接口测试工具
- 网络信息安全之APT攻击
- GRUB--多系统启动引导器