隨筆-42  評論-578  文章-1  trackbacks-0
          代理模式的一種常見的實(shí)現(xiàn)方案是,定義一個接口或抽象類,并派生出目標(biāo)子類,和代理子類。我們要操作的是目標(biāo)子類里的方法,而很多時候,我們需要為目錄子類中的方法增加額外的處理,如果增加日志功能、條件判斷等,這時候,就很有必要用到代理類。
          /**
           * 代理子類和目標(biāo)子類的公共接口
           * 
          @author rongxinhua
           *
           
          */
          public interface MyInterface {
              
              
          public void doOperation();

          }

          /**
           * 目標(biāo)子類
           * 
          @author rongxinhua
           *
           
          */
          public class RealClass implements MyInterface {

              
          /**
               * 我們要執(zhí)行的目標(biāo)方法
               
          */
              @Override
              
          public void doOperation() {
                  System.out.println(
          "doOperation");
              }

          }

          而在沒有使用代理模式的情況下,我們是這樣執(zhí)行目標(biāo)方法的:
                  RealClass realObj = new RealClass();
                  realObj.doOperation();    
          //調(diào)用目標(biāo)方法
          打印時輸出:
          doOperation


          而我們要加入額外的處理的話,就可以使用代理類了:
          /**
           * 代理子類
           * 
          @author rongxinhua
           *
           
          */
          public class ProxyClass implements MyInterface {

              
          private MyInterface realObj;    //目標(biāo)子類對象
              
              
          public ProxyClass(MyInterface realObj) {
                  
          this.realObj = realObj;
              }
              
              
          /**
               * 調(diào)用目標(biāo)子類的方法,并在其中加入了前置處理和后置處理
               
          */
              @Override
              
          public void doOperation() {
                  doBefore();
                  realObj.doOperation();
                  doAfter();
              }
              
              
          /**
               * 目標(biāo)方法調(diào)用前的相關(guān)處理
               
          */
              
          private void doBefore() {
                  System.out.println(
          "doBefore");
              }
              
              
          /**
               * 目標(biāo)方法調(diào)用后的相關(guān)處理
               
          */
              
          private void doAfter() {
                  System.out.println(
          "doAfter");
              }

          }

          有了代理類,我們可以這樣執(zhí)行目標(biāo)方法:
                  ProxyClass proxyObj = new ProxyClass(new RealClass());
                  proxyObj.doOperation();    
          //通過代理對象調(diào)用doOperation方法

          打印時輸出:
          doBefore
          doOperation
          doAfter

          本文只是代理模式的在Java中的簡單使用,而代理模式與Java反射機(jī)制的整合,為Java組件開發(fā)增加了強(qiáng)大的生命力,有興趣的朋友可看我另一個博客中的文章:探討代理模式與Java反射機(jī)制的應(yīng)用



          本文原創(chuàng),轉(zhuǎn)載請注明出處,謝謝!http://www.aygfsteel.com/rongxh7(心夢帆影JavaEE技術(shù)博客)
              

          posted on 2010-03-31 16:00 心夢帆影 閱讀(5869) 評論(2)  編輯  收藏 所屬分類: JavaSE

          評論:
          # re: Java的代理模式(通過公共接口實(shí)現(xiàn)) 2010-04-02 09:24 | wangchangbing
          很簡單的例子   回復(fù)  更多評論
            
          # re: Java的代理模式(通過公共接口實(shí)現(xiàn)) 2011-10-13 20:18 | andysuo
          介紹的很不錯,新手一看就明白  回復(fù)  更多評論
            

                  歡迎光臨我的博客,本博客文章均為個人原創(chuàng),歡迎提出寶貴的意見和建議!(容新華)

          <2010年3月>
          28123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          隨筆分類(61)

          三人行

          常用網(wǎng)站

          搜索

          •  

          積分與排名

          • 積分 - 477006
          • 排名 - 107

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 叶城县| 巢湖市| 个旧市| 久治县| 从江县| 融水| 奈曼旗| 南部县| 兴业县| 甘孜| 土默特右旗| 梧州市| 巴楚县| 高陵县| 柞水县| 镇远县| 安岳县| 岳阳县| 福建省| 左云县| 阿坝县| 武城县| 鄯善县| 桂林市| 呼伦贝尔市| 白玉县| 鄂尔多斯市| 旬阳县| 铜梁县| 集安市| 青河县| 长垣县| 西昌市| 繁峙县| 岳池县| 稻城县| 苗栗县| 奎屯市| 陇南市| 博乐市| 梁河县|