1.代理模式很好地将两个直接关联的类进行了解耦,并且还可以在代理类中添加额外的代码,以进行特殊的处理,如果不采用代理模式,当两个类关联式,就需要再代码中直接调用另一个类B,这样如果需要添加一些特殊的处理,就通用要直接写在某一个类A的代码中,当有很多类都需要这些特殊处理时,每个类都必须编写相应的特殊处理的代码,就不能进行代码的复用,采用代理模式就能避免这些问题。
在程序开发过程中,经常会遇到一些和具体的业务逻辑无关的代码控制,如日志,权限,事务处理等,每段代码都添加日志或权限,事务处理的代码,程序编写起来会很麻烦,如果能有一个代理类,统一进行额外的处理,就可以放更多精力在业务逻辑代码中了。
代理模式的关键点:代理对象与目标对象。代理对象是对目标对象的扩展,并会调用目标对象。
代理模式就是给一个对象提供一个代理对象,由这个代理对象控制对原对象的引用,使代理类在客户端和原对象之间起到一个中介的作用。代理模式主要由3部分组成:抽象目标类,具体目标类和代理类。
2.静态代理
静态代理由我们自己去生成的固定的代码进行编译。需要定义接口或者抽象的父类作为抽象目标类,具体目标类和代理类一起实现相同的接口或者是继承相同的类,然后通过调用相同的方法来调用目标对象的方法。
3.动态代理
动态代理模式:在程序运行期间动态生成代理类。spring的aop面向切面编程就是使用动态代理模式来实现的。
JVM可以自己创建代理类,这样不仅提高了效率,而且更灵活。动态代理的3个主要的类:
proxy类、InvocationHandler、Method
通过proxy类和InvocationHandler接口可以生成JDK动态代理类和动态代理对象。
对于代理的接口的实际处理,是一个java.lang.reflect.InvocationHandler,它提供了一个invoke方法供实现者提供相应的代理逻辑的实现。可以兑实际的实现进行一些特殊的处理,像spring aop中的各种Adevice.
更多武汉IT培训相关资讯,请扫描下方二维码