码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-11-15 23:02:59      阅读:310      评论:0      收藏:0      [点我收藏+]

标签:io   ar   sp   java   on   代码   bs   ad   ef   

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

 

代码实现。

 

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

 

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

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();

}

 

}

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

标签:io   ar   sp   java   on   代码   bs   ad   ef   

原文地址:http://www.cnblogs.com/hjy9420/p/4100388.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!