• 设计模式之代理模式(动态代理)


    跟之前上一篇静态代理的差不多。这个是在执行的时候动态的产生代理对象,开始是不知道具体的代理对象,是传入具体对象,就产生该具体对象的代理对象。而之前的静态代理是预知要传入的具体对象交给哪一个代理对象执行。

    代码实现。

    首先定义抽象角色,他是代理对象和具体对象的共同接口。可以是接口,也可以是抽象类。

    //抽象角色 定义的是一种类型 具有某种共同行为的类型

    public interface ProxyInterface{

      //定义行为,代理对象和具体对象的共同行为

      public void run();

    }

    //定义具体对象  也要实现抽象角色 

    public class SpecificObj implements ProxyInterface{

          public void run(){

              //执行具体的方法

             System.out.println("执行具体对象的方法");

         }

    }

    //定义代理角色   要动态生成代理角色,都是要实现InvocationHandler

    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;

    public class ProxyDemo implements InvocationHandler{

    //在这里维护一个私有的具体对象

    private Object target;

    //定义构造函数,参数是具体要代理的对象

       ProxyDemo (Object target){

        this.target=target;

      }

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    Object result = null;

    //调用具体对象前的操作
    result = method.invoke(obj,args);

    //调用具体对象后的操作
    return result;
    }

    public static Object bind(Object obj){

    //动态生成具体的代理对象
    return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(),new ProxyDemo(obj));
    }

    }

    public class MainTest {

    public static void main(Strings[] args){

    ProxyInterface proxy = (ProxyInterface)new ProxyDemo().bind(new SpecificObj());

    proxy .run();

    }

    }

  • 相关阅读:
    微信公众平台开发(46)在线电影/移动影院
    微信公众平台开发(45)食物营养及热量查询
    微信公众平台开发(44)历史上的今天
    微信公众平台开发(43)火车时刻查询
    企业移动互联网O2O微信支付流程图
    淘宝天猫店铺微信公众平台建设指南
    iOS MachO
    iOS mmap
    iOS isEqual
    iOS Hook
  • 原文地址:https://www.cnblogs.com/hjy9420/p/4100388.html
Copyright © 2020-2023  润新知