代理模式

一:代理模式


定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

例子:房东与房屋中介。房东关心,租房者只要签订合同,缴纳房租就可以租房。但是房东出租房屋需要发布广告、带领租房人来看房屋这些繁琐的事。如果这些事情交给中介,房东就可以专注于自己关注的事。

 

简言之:代理模式就是让中介做一些用户不关心但必须要做的事。

 

 代理模式

代理类和委托类必须实现同一个接口。

 

二:模拟代理模式

 

模拟代理~~~

让业务方法执行前后加入一些辅助功能。

 代理模式

 

作为一个优秀的猿类当然不能那么low了。

 

 

三:静态代理


实现步骤:

I:自定义接口

II:实现类实现接口,代理实现接口、并提供before和after方法

接口:

 代理模式

接口实现类:

 代理模式

代理类:

 代理模式

 

Test 类

 代理模式

运行结果

 代理模式

 


四:动态代理[JDK动态代理]

 

静态代理可以解决问题,但是如果有多个业务需要代理,需要声明很多的接口与相关的代理类。[这么写代码不优雅,代码需要进一步简化。]

 

实现InvocationHandler接口

 代理模式

 

测试类

 代理模式

可以看出newProxyInstance方法的三个参数:

1:ClassLoader

2:该实现的的所有接口

3:动态代理对象

为了避免到处都是Proxy.newProxyInstance方法将这个方法封装、重构。

 

 代理模式

 

五:Glib动态代理[解决JDK动态代理不能解决问题]


JDK动态代理不能够代理一个没有任何接口的类。

它是一个再运行期间动态生成字节码的工具,也就是生成动态代理类。

 代理模式

 代理模式