💻博主现有专栏:
C51单片机(STC89C516),c语言,c++,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux,基于HTML5的网页设计及应用,Rust(官方文档重点总结),jQuery,前端vue.js,Javaweb开发,设计模式、Python机器学习等
🥏主页链接:
目录
🎯模式动机与定义
通过引入一个新的对象(远程代理对象)来实现对真实对象的操作,或者将新的对象作为真实对象的一个替身
定义;
- 代理模式(Proxy Pattern) :给某一个对象提供一个代理,并由代理对象控制对原对象的引用
- 对象结构型模式
- 代理对象可以在客户端和目标对象之间起到中介的作用
- 通过代理对象去掉客户不能看到的内容和服务或者添加客户需要的额外的新服务
🎯代理模式的结构与实现
代理模式的结构比较简单,只要是通过定义一个集成抽象主题的代理来包含真实主题,从而实现对真实主题访问。
模式的结构
代理模式的主要角色如下:
1)抽象主题类:通过接口或抽象类声明真实主题或代理对象实现的业务方法。
2)真实主题类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要 引用的对象。
3)代理类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。
🎯代理模式的应用场景
代理模式是一种常见的设计模式,它可以在多种场景下应用,其中一些包括:
- 远程代理(Remote Proxy):当某些对象位于不同的地址空间,需要通过网络通信进行访问时,可以使用远程代理。远程代理隐藏了对象的实际位置,并负责处理远程通信的细节,使得客户端可以像访问本地对象一样访问远程对象。
- 虚拟代理(Virtual Proxy):在创建开销较大的对象时,可以使用虚拟代理。虚拟代理延迟对象的实例化,直到真正需要时才创建对象实例,从而节省资源并提高性能。
- 保护代理(Protection Proxy):保护代理控制对对象的访问,只有满足特定条件的客户端才能访问对象。这种场景常见于需要权限控制的系统中。
- 缓存代理(Cache Proxy):缓存代理在访问对象时会缓存结果,当下一次请求相同的对象时,直接返回缓存的结果,而不必再次执行耗时的操作。
- 日志记录代理(Logging Proxy):日志记录代理用于记录对象的访问信息,例如访问时间、请求参数等,以便进行日志记录和分析。
- 智能引用代理(Smart Reference Proxy):智能引用代理在对象被引用时执行额外的操作,例如统计对象的引用次数,或者在对象被销毁时执行清理操作。
这些只是代理模式的一些常见应用场景,实际上代理模式可以在许多其他情况下使用,以提供额外的控制和功能。
🎯模式效果与应用
代理模式优点:
- 代理对象可以隐藏原始对象的实现细节,使得客户端无需了解原始对象的具体实现。
- 代理对象可以在原始对象的基础上添加额外的功能,例如缓存、安全验证等。
- 代理对象可以控制对原始对象的访问,保护原始对象不被非法访问。
- 代理对象可以在客户端和原始对象之间起到中介作用,使得客户端与原始对象之间的耦合度降低。
代理模式缺点:
- 慢:由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢(例如保护代理)
- 引入代理类会增加系统的复杂性,增加了学习和理解的成本(远程代理)