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 閱讀(1027) 評論(0)  編輯  收藏 所屬分類: Design Pattern、JEE Pattern

          主站蜘蛛池模板: 梧州市| 西乌珠穆沁旗| 珠海市| 平江县| 台南市| 蕉岭县| 裕民县| 怀远县| 天等县| 郸城县| 尚义县| 敦化市| 惠水县| 丹阳市| 潮安县| 大渡口区| 黄骅市| 贺兰县| 延吉市| 邢台县| 井陉县| 班戈县| 凯里市| 大悟县| 阿城市| 若尔盖县| 辰溪县| 滕州市| 哈尔滨市| 依安县| 凌云县| 获嘉县| 塔河县| 岳池县| 新营市| 当涂县| 衡南县| 陇南市| 盘锦市| 磐石市| 安岳县|