Java中的代理模式(Proxy Pattern)

栏目: Java · 发布时间: 6年前

内容简介:代理模式的作用是控制和管理对象的访问权限;它的优点是:想要找代理的对象,可以不用每次都自己实现某个功能,可以把某个方法的调用权限,交给代理类来完成。一般分为运行结果: 普通上传啦~静态代理是自己写代理类,动态代理是让代码动态实现代理类:

代理模式的作用是控制和管理对象的访问权限;它的优点是:想要找代理的对象,可以不用每次都自己实现某个功能,可以把某个方法的调用权限,交给代理类来完成。一般分为 静态代理动态代理 。要实现代理模式,代理类和目标类需要实现同样的接口。 这个以上传业务举例:

静态代理

//我们定一个接口
  interface IUpload {
    void onUpload();
  }
    //定义目标类,实现前面接口
  public static class CommonUploader implements IUpload {

    @Override
    public void onUpload() {
      System.out.println("普通上传啦~");
    }
  }
    //定义代理类,实现同意的接口
  public static class ProxyUploader implements IUpload {
    //代理类持有目标对象类的引用
    CommonUploader commonUploader;

    private ProxyUploader(CommonUploader commonUploader) {
      this.commonUploader = commonUploader;
    }
    //扩展实现
    @Override
    public void onUpload() {
      commonUploader.onUpload();
    }
  }
  //****运行****
   public static void main(String a[]) {
    CommonUploader commonUploader = new CommonUploader();
    //静态代理
    ProxyUploader proxyUploader = new ProxyUploader(commonUploader);
    proxyUploader.onUpload();
  }
复制代码

运行结果: 普通上传啦~

动态代理

静态代理是自己写代理类,动态代理是让代码动态实现代理类:

interface IUpload {
    void onUpload();
  }

  public static class CommonUploader implements IUpload {

    @Override
    public void onUpload() {
      System.out.println("普通上传啦~");
    }
  }
  //****以上代码和静态代码一致
   public static class DynamicProxyUploader implements InvocationHandler {

    Object object;

    DynamicProxyUploader(Object o) {
      this.object = o;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
      method.invoke(object, args);
      return null;
    }
  }
  //***运行
   public static void main(String a[]) {
    CommonUploader commonUploader = new CommonUploader();
    //动态代理
    IUpload iUpload = (IUpload) Proxy.newProxyInstance(commonUploader.getClass().getClassLoader(),
        commonUploader.getClass().getInterfaces(), new DynamicProxyUploader(commonUploader));
    iUpload.onUpload();
  }
复制代码

运行结果: 普通上传啦~

Proxy类位于 Java 源代码的java.lang.reflect下,是动态代理机制的主类,它提供了一组静态方法来为一组接口动态地生成代理类及其实例。

Thanks:


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入理解计算机系统

深入理解计算机系统

Randal E.Bryant、David O'Hallaron / 龚奕利、雷迎春 / 中国电力出版社 / 2004-5-1 / 85.00元

从程序员的视角,看计算机系统! 本书适用于那些想要写出更快、更可靠程序的程序员。通过掌握程序是如何映射到系统上,以及程序是如何执行的,读者能够更好的理解程序的行为为什么是这样的,以及效率低下是如何造成的。粗略来看,计算机系统包括处理器和存储器硬件、编译器、操作系统和网络互连环境。而通过程序员的视角,读者可以清晰地明白学习计算机系统的内部工作原理会对他们今后作为计算机科学研究者和工程师的工作有......一起来看看 《深入理解计算机系统》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试