论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
代理模式
代理模式
美食家大橙子
金牌会员
|
2024-8-19 08:13:54
|
显示全部楼层
|
阅读模式
楼主
主题
902
|
帖子
902
|
积分
2706
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能
,这种范例的筹划模式属于结构型模式。
代理模式通过引入一个代理对象来控制对原对象的访问。代理对象在客户端和目标对象之间充当中介,负责将客户端的请求转发给目标对象,同时可以在转发请求前后进行额外的处理。
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
介绍
意图
为其他对象提供一种代理以控制对这个对象的访问。
主要解决的问题
代理模式解决的是在直接访问某些对象时可能遇到的问题,例如对象创建成本高、需要安全控制或远程访问等。
利用场景
当需要在访问一个对象时进行一些控制或额外处理时。
实现方式
增长中间层
:创建一个代理类,作为真实对象的中间层。
代理与真实对象组合
:代理类持有真实对象的引用,并在访问时进行控制。
关键代码
代理类
:实现与真实对象类似的接口,并添加额外的控制逻辑。
真实对象
:实际执行任务的对象。
应用实例
快捷方式
:Windows系统中的快捷方式作为文件或步伐的代理。
角色饰演
:孙悟空作为高翠兰的代理,猪八戒无法区分。
代售点
:购买火车票时,代售点作为火车站的代理。
支票
:作为银行账户资金的代理,控制资金的访问。
Spring AOP
:利用代理模式来实现面向切面编程。
优点
职责分离
:代理模式将访问控制与业务逻辑分离。
扩展性
:可以灵活地添加额外的功能或控制。
智能化
:可以智能地处理访问请求,如延迟加载、缓存等。
缺点
性能开销
:增长了代理层可能会影响请求的处理速度。
实现复杂性
:某些范例的代理模式实现起来可能较为复杂。
利用发起
根据具体需求选择合适的代理范例,如远程代理、假造代理、掩护代理等。
确保代理类与真实对象接口同等,以便客户端透明地利用代理。
注意事项
与适配器模式的区别
:适配器模式改变接口,而代理模式不改变接口。
与装饰器模式的区别
:装饰器模式用于加强功能,代理模式用于控制访问。
结构
主要涉及到以下几个焦点角色:
抽象主题(Subject):
定义了真实主题和代理主题的共同接口,这样在任何利用真实主题的地方都可以利用代理主题。
真实主题(Real Subject):
实现了抽象主题接口,是代理对象所代表的真实对象。客户端直接访问真实主题,但在某些环境下,可以通过代理主题来间接访问。
代理(Proxy):
实现了抽象主题接口,并持有对真实主题的引用。代理主题通常在真实主题的基础上提供一些额外的功能,例如延迟加载、权限控制、日志记录等。
客户端(Client):
利用抽象主题接口来操作真实主题或代理主题,不需要知道具体是哪一个实现类。
实现
我们将创建一个
Image
接口和实现了
Image
接口的实体类。
ProxyImage
是一个代理类,淘汰
RealImage
对象加载的内存占用。
ProxyPatternDemo
类利用
ProxyImage
来获取要加载的
Image
对象,并按照需求进行体现。
步骤 1
创建一个接口。
Image.java
public interface Image { void display(); }
步骤 2
创建实现接口的实体类。
RealImage.java
public class RealImage implements Image { private String fileName; public RealImage(String fileName){ this.fileName = fileName; loadFromDisk(fileName); } @Override public void display() { System.out.println("Displaying " + fileName); } private void loadFromDisk(String fileName){ System.out.println("Loading " + fileName); } }
ProxyImage.java
public class ProxyImage implements Image{ private RealImage realImage; private String fileName; public ProxyImage(String fileName){ this.fileName = fileName; } @Override public void display() { if(realImage == null){ realImage = new RealImage(fileName); } realImage.display(); } }
步骤 3
当被请求时,利用
ProxyImage
来获取
RealImage
类的对象。
ProxyPatternDemo.java
public class ProxyPatternDemo { public static void main(String[] args) { Image image = new ProxyImage("test_10mb.jpg"); // 图像将从磁盘加载 image.display(); System.out.println(""); // 图像不需要从磁盘加载 image.display(); } }
步骤 4
执行步伐,输出结果:
Loading test_10mb.jpg
Displaying test_10mb.jpg
Displaying test_10mb.jpg
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
美食家大橙子
金牌会员
这个人很懒什么都没写!
楼主热帖
【计算机视觉】图像检索
面了个腾讯拿28k跳槽出来的,真正见识 ...
【大话云原生】负载均衡篇-小饭馆客流 ...
MySQL实战45讲 11
全面数字化时代,国有大型银行如何走好 ...
【docker专栏2】CentOS操作系统安装Doc ...
Python入门自学进阶-Web框架——14、Dj ...
解决Mac下腾讯会议无法使用OBS等虚拟摄 ...
多线程详解
K8S 性能优化 - OS sysctl 调优
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表