行业信息 > 三分钟带你认识代理模式

三分钟带你认识代理模式

发布时间:

对于代理,大家应该有着一定的了解,但不一定知道代理模式。何为代理模式?即Proxy Pattern,是程序设计中的一种设计模式。

 

它的设计思路是:定义一个抽象角色,让代理角色和真实角色分别去实现它。而所谓的代理者是指一个类别可以作为其它东西的接口。代理者可以作任何东西的接口:网络连接、存储器中的大对象、文件或其它昂贵或无法复制的资源。著名的代理模式例子为引用计数(英语:reference counting)指针对象。

 

 

以艺人为例,众所周知,因为公司安排或者个人原因,艺人也会接一些商演。如何联系艺人?我们通常是通过经纪人、公司等第三方来与艺人进行联系,具体要表演什么,需要多少费用都是与经纪人等第三方进行商量的,而这里,经纪人就是一个代理。

 

而互联网中的代理模式就是这样的一种方式,提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。这样做的好处就是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。

 

当一个复杂对象的多份副本须存在时,代理模式可以结合享元模式以减少存储器用量。典型作法是创建一个复杂对象及多个代理者,每个代理者会引用到原本的复杂对象。而作用在代理者的运算会转送到原本对象。一旦所有的代理者都不存在时,复杂对象会被移除。

 

由于各种代理模式样式差别很大,不容易从程序上辨认,我们通常会从功能上区分。在我们Java程序中代理模式分为:静态代理和动态代理(动态代理又分为:JDK动态代理和CGLIB动态代理)两种代理从虚拟机加载类的角度来讲,本质上都是一样的,都是在原有类的行为基础上,加入一些多出的行为,甚至完全替换原有的行为。

 

代理类与委托类通常会存在关联关系,通常需要实现同一个接口。一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。代理模式的思想是为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象。这些额外的操作通常需要与实际对象进行通信。(推荐阅读《什么是代理服务器?如何选择优质的代理服务器?》《IP限制怎么办?代理IP轻松解决难题》)

qq客服
QQ客服
在线客服
在线客服
提交工单
提交工单
返回顶部