java 程序性能优化《第二章》设计优化 2.1善用设计模式 2 代理模式-阿里云开发者社区

开发者社区> 李大嘴吧> 正文

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

简介:
+关注继续查看

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

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

1.代理模式的结构

代理模式的主要参与者有4个,如表2.1所示。
表2.1 代理模式角色
角色 作用
主题接口 定义代理类和真实主题的公共对外方法,也是代理类代理真实主题的方法
真实主题 真正实现业务逻辑的类
代理类 用来代理和封装真实主题
Main 客户端,使用代理类和主题接口完成一些工作

以一个简单的例子来阐述使用代理模式实现延迟加载的方法及其意义。假设客户端软件,有根据用户请求,去数据库查询数据的功能。在查询数据前,当系统有大量的类似操作存在时(比如xml解析等) ,所有这些初始化操作的叠加,会使得系统的启动速度变得非常缓慢。为此,使用代理模式,使用代理类,封装对数据库查询中的初始化操作,当系统启动时,初始化这个代理类,而非真实地数据库查询类,而代理类什么都没有做,因此,它的构造是相当迅速的。
在系统启动时,将消耗资源最多的方法都使用代理模式分离,就可以加快系统的启动速度,减少用户的等待时间。而在用户真正做查询操作时,再有代理类,单独去加载真实的数据库查询类,完成用户的请求。这个过程就是使用代理模式实现了延迟加载。

PS:代理模式可以用于多种场合,如果用于远程调用的网络代理、考虑安全因素的安全代理等,延迟加载只是代理模式的一种应用场景。

延迟加载的核心思想是:如果当前并没有使用这个组件,则不需要真正地初始化它,使用一个代理对象替代它原有的位置,只要在真正需要使用的时候,才对它进行加载。使用代理模式的延迟加载时非常有意义的,首先,它可以在时间轴上分散系统压力,尤其在系统启动时,不必完成所有的初始化工作,从而加速启动时间;其次,对很多真实主题而言,在软件启动直到被关闭的整个过程中,可能根本不会被调用,初始化这些数据无疑是一种资源浪费。图2.2显示了使用代理类封装数据库查询类后,系统的启动过程。




未完。待续!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
3996 0
我的程序优化-尽量减少数据库连接操作
最近做一个项目,做的比较郁闷,现在把项目经验总结在这里。项目的主要功能就是为第三方程序提供数据,并根据客户端的调用提供数据更新。我的程序属于服务端。服务端以站点形式部署,以Xml的数据格式输出。 项目以我自己的设计编码完成,并整合测试。
1075 0
初探Java设计模式4:一文带你掌握JDK中的设计模式
转自https://javadoop.com/post/design-pattern 行为型模式 策略模式 观察者模式 责任链模式 模板方法模式 状态模式 行为型模式总结 本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看 https://github.
4887 0
Java高新技术1---增强for循环 ---装箱与拆箱享元设计模式--自己写枚举--可变长度的参数
其实这些知识是我在 看张孝祥老师的Java视频的时候 记录的  ,我可以负责任的说 对于 入门人员来说  这部视频 是 精粹 ,可以 3天内 带你 进入 Java的 另一个 境界 。 话不多说 ,不信 自己去看吧  。
738 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
3951 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
5663 0
用 Kotlin 的函数式编程 替代 GOF 设计模式
用 Kotlin 的函数式编程 替代 GOF 设计模式 函数式编程(FP) 《Kotlin极简教程》正式上架: 点击这里 > 去京东商城购买阅读 点击这里 > 去天猫商城购买阅读 非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎随时与我交流~ 值就是函数,函数就是值。
1301 0
+关注
72
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载