java 程序性能优化《第二章》设计优化 2.1善用设计模式 2 代理模式
发布日期:2021-08-26 15:47:31 浏览次数:8 分类:技术文章

本文共 1216 字,大约阅读时间需要 4 分钟。

java 程序性能优化《第二章》设计优化 2.1善用设计模式 2 代理模式

代理模式也是一种很常见的设计模式。它使用代理对象完成用户请求,屏蔽用户对真实对象的访问。就如同现实中的代理一样,代理人被授权执行当事人的一些适宜,而无需当事人出面,从第三方的角度看,似乎当事人并不存在,因为他只和代理人通信。而事实上,代理人是要有当事人的授权,并且在核心问题上还需要请示当事人。
在现实中,使用代理的情况很普遍,而且原因也很多。比如,当事人因为某些隐私不方便出面,或者当事人不具备某些相关的专业技能,而需要一个职业人员来完成一些专业的操作,也可能由于当事人没有时间处理事务,而聘用代理人出面。
在软件设计中,使用代理模式的意图也很多,比如因为安全问题,需要屏蔽客户端直接访问真实对象;或者在远程调用中,需要使用代理类处理远程方法调用的技术细节(如 RMI );也可能是为了提升系统性能,对真实对象进行封装,从而达到延迟加载的目的。在本节中,主要讨论使用代理模式实现延迟加载,从而提升系统的性能和反应速度。

1.代理模式的结构

代理模式的主要参与者有4个,如表2.1所示。
表2.1 代理模式角色
角色 作用
主题接口 定义代理类和真实主题的公共对外方法,也是代理类代理真实主题的方法
真实主题 真正实现业务逻辑的类
代理类 用来代理和封装真实主题
Main 客户端,使用代理类和主题接口完成一些工作
以一个简单的例子来阐述使用代理模式实现延迟加载的方法及其意义。假设客户端软件,有根据用户请求,去数据库查询数据的功能。在查询数据前,当系统有大量的类似操作存在时(比如xml解析等) ,所有这些初始化操作的叠加,会使得系统的启动速度变得非常缓慢。为此,使用代理模式,使用代理类,封装对数据库查询中的初始化操作,当系统启动时,初始化这个代理类,而非真实地数据库查询类,而代理类什么都没有做,因此,它的构造是相当迅速的。
在系统启动时,将消耗资源最多的方法都使用代理模式分离,就可以加快系统的启动速度,减少用户的等待时间。而在用户真正做查询操作时,再有代理类,单独去加载真实的数据库查询类,完成用户的请求。这个过程就是使用代理模式实现了延迟加载。
PS:代理模式可以用于多种场合,如果用于远程调用的网络代理、考虑安全因素的安全代理等,延迟加载只是代理模式的一种应用场景。
延迟加载的核心思想是:如果当前并没有使用这个组件,则不需要真正地初始化它,使用一个代理对象替代它原有的位置,只要在真正需要使用的时候,才对它进行加载。使用代理模式的延迟加载时非常有意义的,首先,它可以在时间轴上分散系统压力,尤其在系统启动时,不必完成所有的初始化工作,从而加速启动时间;其次,对很多真实主题而言,在软件启动直到被关闭的整个过程中,可能根本不会被调用,初始化这些数据无疑是一种资源浪费。图2.2显示了使用代理类封装数据库查询类后,系统的启动过程。
未完。待续!

转载地址:https://blog.csdn.net/weixin_33890499/article/details/90685005 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:解决NDK开发中Eclipse报错“Unresolved inclusion jni.h”的最终方法
下一篇:Android异步加载图像(含线程池,缓存方法)

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年03月14日 23时40分10秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

php中如何调用sql server,php调用SQL SERVER 2008及以上版本的方法 2019-04-21
python多线程实现kmeans,3种方式实现python多线程并发处理 2019-04-21
matlab 变量不存在,matlab程序运行时提示变量未定义 2019-04-21
php编码函数 base58,1. Base58可逆加密 2019-04-21
oracle 在需要下列之一,Oracle存储过程中PLS-00103:出现符号“/”在需要下列之一时:(... 2019-04-21
oracle10g dblink优化,Oracle10g通过dblink访问数据异常 2019-04-21
linux安装时的iso文件,直接用ISO文件在linux上安装新系统 2019-04-21
linux修改文件权限为所有人都可以访问,Linux 笔记分享八:文件权限的设定 2019-04-21
linux中卸载ambri-servle,Kerberos 命令使用 2019-04-21
linux二进制反编译,Xori:一款来自BlackHat 2018的二进制反汇编和静态分析工具 2019-04-21
linux两台主机添加信任,Linux两台机器间添加信任,实现不用密码问,互传文件... 2019-04-21
linux 自动获取ssl证书,linux生成自验证ssl证书的具体命令和步骤 2019-04-21
linux基础命令20个,20-linux中基础命令 2019-04-21
重置网络配置 android,重置Android移动网络信号? 2019-04-21
java约瑟夫环pta上_cdoj525-猴子选大王 (约瑟夫环) 2019-04-21
java++记录+运行_记录java+testng运行selenium(三)---xml、ini、excel、日志等配置 2019-04-21
mysql居左查询abcd_MySql速查手册 2019-04-21
loadrunner 错误: 无法找到 java.exe_LoadRunner错误及解决方法总结 2019-04-21
Java小魔女芭芭拉_沉迷蘑菇不可自拔,黏土人《小魔女学园》苏西·曼芭芭拉 图赏... 2019-04-21
php+mysql记事本_一个简单记事本php操作mysql辅助类创建 2019-04-21