java代理模式之实用篇

java代理模式之实用篇

ID:20272132

大小:1.33 MB

页数:23页

时间:2018-10-11

java代理模式之实用篇_第1页
java代理模式之实用篇_第2页
java代理模式之实用篇_第3页
java代理模式之实用篇_第4页
java代理模式之实用篇_第5页
资源描述:

《java代理模式之实用篇》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、代理模式–jackProxy代理签证服装代理商代理服务器日常生活中的代理考虑这样一个实际应用:要一次性访问多条数据。这个功能的背景是这样的:在一个HR(人力资源)应用项目中客户提出,当选择一个部门或是分公司的时候,要把这个部门或者分公司下的所有员工都显示出来,而且不要翻页,方便他们进行业务处理。在显示全部员工的时候,只需要显示名称即可,但是也需要提供如下功能:在必要的时候可以选择并查看某位员工的详细信息。客户方是一个集团公司,有些部门或者分公司可能有好几百人,不让翻页,也就是要求一次性地获取这么多条数据并展示出来。该怎么实现呢?场景问题场景问题不用模式的解决

2、方案:相信很多同学都会很快想到一条sql语句来实现该功能:Stringsql=“select*from用户表,部门表”+“where用户表.depId=部门表.depId”+“and部门表.depIdlike‘”+用户选择查看的DepId+”%’”;为了方便获取某个部门或者某个分公司下的所有员工信息,设计部门编号的时候,是按照层级来进行编码的,比如,上一级部门的编码为“01”,那么本级的编码就是“0101”、“0102”……,下一级的编码是“010101”、“010102”……。这种设计方式,从设计上看虽然不够优雅,但是实用。像这种获取某个部门或者某个分公司

3、下的所有员工信息的功能,就不用递归查找了,直接使用like,只要找到以该编号开头的所有部门就可以了。有何问题上面的实现看起来简单,功能也正确,但是蕴含一个较大的问题:当一次性访问的数据条数过多,而且每条描述deeply数据量又很大的话,将会消耗很多内存。那么该怎么办呢,才能即把多条用户数据的姓名显示出来,而又能节省内存空间?当然还要实现在用户想要看到更多数据的时候,能正确访问到数据呢?解决方案:使用代理模式1、代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。2、以上问题的解决思路:让我们仔细分析上面的问题,一次性访问多条数据,这个可能性是很难避

4、免的,是客户的需要。也就是说,要想节省内存,就不能从减少数据条数入手了,那就只能减少每条数据的数据量上来考虑。代理模式的结构和说明一种可能的代理结构对象图:使用代理模式重写示意图1+N次查询看完上面的示例,大家可能会发现,这种实现方式有一个潜在的问题,就是如果客户对每条用户数据都要求查看详细数据的话,那么总的查询数据库的次数会是1+N次之多。第一次查询,获取到N条数据的用户编号和姓名,然后展示给客户看。如果这个时候,客户对每条数据都点击查看的话,那么每一条数据都需要重新查询数据库,那么最后总的查询数据库的次数就是1+N次了。从上面的分析可以看出,这种做法最合

5、适的场景就是:客户大多数情况下只需要查看用户编号和姓名,而少量的数据需要查看那详细数据。这样即节省了内存,又减少了操作数据库的次数。模式讲解认识代理模式:代理模式是通过创建一个代理对象,用这个代理对象去代表真实的对象,客户端得到这个代理对象后,对客户端没有什么影响,就跟得到了真是对象一样来使用。代理的分类:虚代理、远程代理,copy-on-write代理、保护代理、Cache代理、防火墙代理、同步代理、智能指引。在这些代理类型中,最常见的是虚代理、保护代理、远程代理和智能指引这几种。我们今天主要讨论需代理和保护代理,这两种代理也是在实际开发中使用频率最高的两

6、种代理。具体目标和代理的关系从代理模式的结构图看来,好像是有一个具体目标就有一个代理类,其实不是这样的。如果代理类能完全通过接口来操作它所代理的目标对象,那么代理对象就不需要知道具体的目标对象,这样就无须为每一个具体目标类创建一个代理类了。但是,如果代理类必须要实例化它代理的目标对象,那么代理类就必须知道具体被代理的对象,这种情况下,一个具体目标类通常会有一个代码类。这种情况多出现在虚代理情况中。代理模式调用顺序示意图保护代理示例需求:现在有一个订单系统,要求是:一旦订单被创建,只有订单的创建人才可以修改订单中的数据,其他人则不能修改。相当于现在如果有了一个

7、订单对象实例,那么就需要控制外部对它的访问,满足条件的可以访问,不满足条件的就不能访问。定义:保护代理是一种控制对原始对象访问的代理,多用于对象应该有不同的访问权限的时候。保护代理会检查调用者是否具有请求所必需访问权限,如果没有相应的权限,那么就不会调用目标对象,从而实现对目标对象的保护。保护代理系统结构示意图Java中的代理Java对代理模式提供了内建的支持,在java.lang.reflect包下面,提供了一个Proxy的类和一个InvocationHandler的接口。通常把前面自己实现的代理模式称为Java的静态代理。通常把使用Java内建的对代理模

8、式支持的功能来实现的代理称为Java的动态代理。动态

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。