cuiyi's blog(崔毅 crazycy)

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

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

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

          ?? 示例:
          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 閱讀(1023) 評(píng)論(0)  編輯  收藏 所屬分類: Design Pattern、JEE Pattern

          主站蜘蛛池模板: 醴陵市| 宜阳县| 崇礼县| 江陵县| 东城区| 凤凰县| 宣城市| 东莞市| 招远市| 和硕县| 平度市| 耒阳市| 龙山县| 岑溪市| 松原市| 原阳县| 保靖县| 周口市| 武穴市| 扶绥县| 宜都市| 怀宁县| 西乌珠穆沁旗| 凉山| 阜康市| 平南县| 朝阳区| 新田县| 深州市| 阿勒泰市| 堆龙德庆县| 从化市| 图木舒克市| 江陵县| 左贡县| 常熟市| 沂水县| 山阳县| 略阳县| 昂仁县| 克拉玛依市|