代理模式

2018-09-27  本文已影响0人  bear_small

概念说明

代理模式是常用的设计模式,他的特征是代理类委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等.即我们访问实际对象时是通过代理对象来访问的,实例的访问是在代理对象内部调用完成的。
Proxy类,保存一个引用使得代理可以访问实体,并提供一个与实体相同的接口,这样代理就可以用来代替实体


静态代理

编译时就已经将接口,被代理类,代理类等确定下来
需要三个类,共有接口,代理实现类,委托实现类(被代理类),代理与委托实现共同接口

接口
interface Test {
      void test();
}
代理类
class TestReal implements Test{
      private String name;
      public TestReal(String name){
            this.name = name;
      }
      @Override
      public void test(){
            System.out.println(name+"完成调用.");
      }
}
委托类
class TestProxy implements Test{
      TestReal  testReal;
      public TestProxy(Test test){
            this.testReal = (TestReal)test;
            
      }
      @Override
      public void test(){
            testReal.test();
      }
}

测试
public static void main(String[] args){
      Test real = new TestReal("阿西吧");
      Test proxy = new TestProxy(real);
      proxy .test();
}

代理模式就是在访问实际对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。这里的间接性就是指不直接调用实际对象的方法,那么我们在代理过程中就可以加上一些其他用途。


动态代理

概念:代理类在程序运行时创建的代理方式被成为动态代理。相比于静态代理,动态代理的优势在于可以很方便的对代理类的函数进行统一的处理,而不用修改每个代理类中的方法。
在java的java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过这个类和这个接口可以生成JDK动态代理类和动态代理对象。

newProxyInstance动态代理实际原理,在创建代理对象时,就是通过反射获得这个类的构造方法,然后创建的代理实例

以上动态代理为接口形式的动态代理,所以也就决定了java动态代理只能对接口进行代理,Java的继承机制注定了这些动态代理类们无法实现对class的动态代理。(AOP的一个简单实现)

上一篇 下一篇

猜你喜欢

热点阅读