cuiyi's blog(崔毅 crazycy)

          記錄點滴 鑒往事之得失 以資于發(fā)展
          數(shù)據(jù)加載中……

          我對設(shè)計模式的理解:Dynamic Proxy模式

          代理模式(Proxy,這里側(cè)重于Dynamic Proxy)可以理解成給一個對象提供一個代理對象,這個代理對象就是把原對象進行包裝,使其與調(diào)用處理器相關(guān)聯(lián)。
          ??? 因為代理對象和真實對象具有相同的接口,客戶訪問時,通過接口調(diào)用代理實例的方法,這個調(diào)用會被分發(fā)到該實例對應(yīng)的處理器。處理器在把客戶端調(diào)用傳遞給真實的對象之前或者之后,可執(zhí)行某個操作,也可以選擇不把這個調(diào)用傳遞給真實的對象。
          ???
          ???產(chǎn)生代理對象的過程就是將原對象和調(diào)用處理器邦定的過程,如下:
          Proxy.newProxyInstance(真實對象實例.getClass().getClassLoader(), 真實對象實例.getClass().getInterfaces(),?與真實對象關(guān)聯(lián)的調(diào)用處理器實例);

          ?? 示例:
          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

          主站蜘蛛池模板: 临颍县| 黎川县| 沈丘县| 迭部县| 贵阳市| 莲花县| 攀枝花市| 徐闻县| 界首市| 张家界市| 吉隆县| 共和县| 霍林郭勒市| 米林县| 平定县| 门源| 抚松县| 普宁市| 繁昌县| 本溪市| 东丽区| 宕昌县| 喀什市| 商水县| 梅河口市| 淳安县| 育儿| 利川市| 辽源市| 梓潼县| 绥滨县| 衡阳市| 九龙城区| 桂平市| 且末县| 伊金霍洛旗| 青海省| 津南区| 武强县| 新干县| 昌宁县|