zoukankan      html  css  js  c++  java
  • 动态代理模式

        动态代理模式还是第一次听说,之前虽然学习了代理模式,但是并没有使用过。那么自然就不知道这个模式会有什么优缺点,我们只是看到书上说怎样怎样。那么今天使用到代理模式时就发现,如果我们只是按照书上的标准去照搬代理模式,会有很多的冗余,也不符合面向对象的思想了。

     

        当我们需要给某个类的方法添加同一个功能的时候,如果我们只是简单的使用代理,就会重复的更改所有的方法。而如果我们的业务突然又不需要了,就又是一系列的修改。可见,简单的代理已经不能满足我们的需要了。于是,便用到了动态代理模式。

     

        使用动态代理模式,我们用到InvocationHandler接口的invoke方法和Proxy类。

     

        其中Proxy类主要用来获取动态代理对象。

            proxy类的newProxyInstance方法返回代理类的一个实例,返回后的代理类可以当作被代理类使用。

            它有三个参数:

                ClassLoaderloader   ----指定被代理对象的类加载器

                Class[]Interfaces   ----指定被代理对象所有的接口

                InvocationHandler   ----指定需要调用的InvocationHandler对象

            InvocationHandler对象中加入了代理类代理的接口类(第二个参数指定)的实现类,表现在invoke方法中。所以,调用要实现的接口的方法,都会调用InvocationHandler对象的invoke()方法。而invoke()方法就是Proxy这个动态代理类所代理的接口类的抽象方法的真实实现。

        这样就相当于调用了我们需要调用的方法,同时我们可以对调用做控制。


        一句话总结动态代理:

            newProxyInstance方法的三个参数指定被代理对象的类加载器、接口和对接口的实现,返回被代理的的类实例,调用该实例的方法时其实就是调用包含了该方法的实现的invoke方法。

  • 相关阅读:
    关于第三方库
    一些css属性,抄自某个大神忘记谁了,不好意思
    10.使用express模拟数据服务器
    9.text-shadow
    8.css背景图案
    7.一个抄来圆形菜单
    6.文字闪烁效果
    5.偶然看到的一个css加载动画
    4.怎样使用css实现一个切角效果
    3.写一个简单的弹出菜单
  • 原文地址:https://www.cnblogs.com/riskyer/p/3341645.html
Copyright © 2011-2022 走看看