JAVA代理模式

2018-07-27  本文已影响0人  Jon_Snow09

什么是代理模式

代理类和被代理类实现同一个接口,也就是说他们有着相同的功能,区别在于,被代理类持有代理类的引用,被代理类中所有功能的实现都是由代理类来完成的

为什么要使用代理模式

一个优秀的软件设计,对于类似功能的模块,其中相同的逻辑,应该做到抽取与封装,来保证代码的简洁和可维护性,而对于其中不同的部分,则应该提供相应的方法来进行个性化定制.
现在有三个功能相似的类,他们有很多类似的方法,首先,把这些方法抽取出来,变成一个接口,然后写一个代理类实现这个接口,所有相同的逻辑,都抽取出来放在这个代理类中,三个类再调用这个代理类来完成相应的逻辑,不同的部分则正好可以在方法中自定义
还有第二种情况,一个接口中,有很多的方法,这些方法的实现中有很多的相同之处,比如retrofit的service接口,里面的方法都是网络请求的方法,比如我们现在要对所有的网络请求加缓存,难道所有的方法中都要写一次吗,显然不符合我们的设计规范,这里就可以用动态代理.

如何设计一个静态代理模式

总结:上面这个静态代理完成之后,如果有别的类也需要这两个请求方法,只需要实现这个接口,然后绑定NetWorkServiceImp的对象就好了,非常的方便简洁,也利于维护

如何设计一个动态代理模式

在这里,我们创建一个类实现InvocationHandler接口,在这个类中,有一个invoke方法,我们拿到代理类,通过反射调用接口中所有的方法,同时也正好在这里把每个请求方法的结果都存入缓存中,就不用每个请求方法都写一遍了,我觉得这正是retrofit中通过动态代理获取service对象的原因.

上一篇下一篇

猜你喜欢

热点阅读