cuiyi's blog(崔毅 crazycy)

记录点滴 鉴往事之得失 以资于发展
数据加载中……

我对设计模式的理解:Dynamic Proxy模式

代理模式(Proxy,这里侧重于Dynamic Proxy)可以理解成给一个对象提供一个代理对象,这个代理对象就是把原对象进行包装,使其与调用处理器相关联。
    因为代理对象和真实对象具有相同的接口,客户访问时,通过接口调用代理实例的方法,这个调用会被分发到该实例对应的处理器。处理器在把客户端调用传递给真实的对象之前或者之后,可执行某个操作,也可以选择不把这个调用传递给真实的对象。
   
   产生代理对象的过程就是将原对象和调用处理器邦定的过程,如下:
Proxy.newProxyInstance(真实对象实例.getClass().getClassLoader(), 真实对象实例.getClass().getInterfaces(), 与真实对象关联的调用处理器实例);

   示例:
public interface AnInterface {
 void say();
}


public class AClass implements AnInterface {
 public AClass() {
  System.out.println("AClass:AClass()");
 }
 public void say() {
  System.out.println("AClass:say()");
 }
}


public class MyHandler implements InvocationHandler {
 private Object realObj;
 private MyHandler() {
  }
 public Object bind(Object realObj) {
    this.realObj = realObj;
    return Proxy.newProxyInstance(realObj.getClass().getClassLoader(),
    realObj.getClass().getInterfaces(), this);
 }
 public Object invoke(Object proxy, Method md, Object[] args) throws Throwable {
  Object obj = null;
  System.out.println("invoke()");
  obj = md.invoke(realObj, args);
  return obj;
 }
}

public class Test {
 public static void main(String[] args) {
  MyHandler  handler = new MyHandler ();
  AnInterface proxyObj = handler.bind(new AClass());
  proxyObj.say();
 }
}

posted on 2006-04-29 14:12 crazycy 阅读(1001) 评论(0)  编辑  收藏 所属分类: Design Pattern、JEE Pattern


只有注册用户登录后才能发表评论。


网站导航: