Proxy代理模式

在下图中,可以看到有一个RealSubject,这个对象是目标对象,而在代理模式的设计中,会直接设计一个接口和目标对象一致的代理对象Proxy,他门都实现了Subject的request方法。在这种情况下,对目标对象的request调用,往往就被代理对象给拦截了,通过这种拦截,为目标对象的方法做了铺垫,所以称之为代理模式。

在Proxy的调用过程中,如果客户调用Proxy的request方法,会在调用目标对象的request方法的前后调用一系列的处理,而这一系列的处理对于目标对象来说是透明的,目标对象对这些处理可以毫不知情,这就是代理模式。

具体来说,可以在Java的reflection包中看到Proxy对象,这个对象生成后,所起的作用就类似于Proxy模式中的Proxy对象。在使用时,还需要为代理对象设计一个回调方法,这个回调方法起到的作用是,在其中加入了作为代理需要额外处理的动作,或者说,在这个方法中,所谓额外动作,可以参考Proxy模式中的preOperation()和postOperation()方法。这个回调方法,如果在JDK中实现,需要实现下面所示的InvocationHandler接口:

public interface InvocationHandler{

public Object invoke(Object proxy,Method method,Object[] args)throws Throwable;

}

在这个接口方法中,只声明了一个invoke方法,这个invoke方法的第一个参数是代理对象实例,第二个参数是Method方法对象,代表的是当前Proxy被调用的方法,最后一个参数是被调用的方法中的参数。至于怎么让invoke方法和Proxy挂上钩?只要在实现通过调用Proxy.newIntance方法生成具体Proxy对象时把InvocationHandler设置到参数里就可以了,剩下的由Java虚拟机来完成。

通过反射机制找到目标类的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值