首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

代理模式原理及实例讲解

东汉末年,大将军何进引董卓入京,想借西北王的军队对抗阉党,无奈自己先被阉党做掉,而后造成巨变,导致诸侯并起,最终形成三国鼎立局面。汉献帝即位后,初平三年(公元 192 年),治中从事毛玠向曹操建议“奉天子以令不臣”,曹操采纳了他的建议,迎接汉献帝来到许昌。汉献帝刘协在许都没有实际的权利,曹操不断地诛除公卿大臣,不断地集军政大权于一身。建安元年八月,曹操进驻洛阳,立刻趁张杨、杨奉兵众在外,赶跑了韩暹,接着做了三件事:杀侍中台崇、尚书冯硕等,谓“讨有罪”;封董承、伏完等,谓“赏有功”;追赐射声校尉沮俊,谓“矜死节”。然后在第九天趁他人尚未来得及反应的情况下,迁帝都许,使皇帝摆脱其他势力的控制。此后,他还加紧步伐剪除异己,提高自己的权势。他首先向最有影响力的三公发难,罢免太尉杨彪、司空张喜;其次诛杀议郎赵彦;再次是发兵征讨杨奉,解除近兵之忧;最后是一方面以天子名义谴责袁绍,打击其气焰,另一方面将大将军让予袁绍,稳定大敌。这就是历史上著名的“挟天子以令诸侯”。汉献帝与曹操的关系,是历史上两位伟大的政治家的联手,稳定了东汉政权,最终平稳交接给曹魏政权,也间接映射了我们本文要讲解的“代理模式”。

代理模式

代理模式使用代理对象完成用户请求,屏蔽用户对真实对象的访问。现实世界的代理人被授权执行当事人的一些事宜,无需当事人出面,从第三方的角度看,似乎当事人并不存在,因为他只和代理人通信。而事实上代理人是要有当事人的授权,并且在核心问题上还需要请示当事人。

在软件设计中,使用代理模式的意图也很多,比如因为安全原因需要屏蔽客户端直接访问真实对象,或者在远程调用中需要使用代理类处理远程方法调用的技术细节 (如 RMI),也可能为了提升系统性能,对真实对象进行封装,从而达到延迟加载的目的。

代理模式角色分为 4 种:

1、主题接口:定义代理类和真实主题的公共对外方法,也是代理类代理真实主题的方法;

2、真实主题:真正实现业务逻辑的类;

3、代理类:用来代理和封装真实主题;

4、Main:客户端,使用代理类和主题接口完成一些工作。

延迟加载

以一个简单的示例来阐述使用代理模式实现延迟加载的方法及其意义。假设某客户端软件有根据用户请求去数据库查询数据的功能。在查询数据前,需要获得数据库连接,软件开启时初始化系统的所有类,此时尝试获得数据库连接。当系统有大量的类似操作存在时 (比如 XML 解析等),所有这些初始化操作的叠加会使得系统的启动速度变得非常缓慢。为此,使用代理模式的代理类封装对数据库查询中的初始化操作,当系统启动时,初始化这个代理类,而非真实的数据库查询类,而代理类什么都没有做。因此,它的构造是相当迅速的。

在系统启动时,将消耗资源最多的方法都使用代理模式分离,可以加快系统的启动速度,减少用户的等待时间。而在用户真正做查询操作时再由代理类单独去加载真实的数据库查询类,完成用户的请求。这个过程就是使用代理模式实现了延迟加载。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180121B0M02500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券