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

          }

          /**
           * 目標子類
           * 
          @author rongxinhua
           *
           
          */
          public class RealClass implements MyInterface {

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

          }

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


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

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

          }

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

          打印時輸出:
          doBefore
          doOperation
          doAfter

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



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

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

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

                  歡迎光臨我的博客,本博客文章均為個人原創,歡迎提出寶貴的意見和建議?。ㄈ菪氯A)

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

          隨筆分類(61)

          三人行

          常用網站

          搜索

          •  

          積分與排名

          • 積分 - 476560
          • 排名 - 107

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 边坝县| 武鸣县| 宜黄县| 金平| 杭州市| 上饶县| 凤城市| 永胜县| 额尔古纳市| 广东省| 儋州市| 安陆市| 曲靖市| 霍邱县| 中牟县| 筠连县| 民丰县| 乌兰浩特市| 达拉特旗| 法库县| 固阳县| 洪洞县| 沧州市| 平遥县| 和政县| 宁南县| 六安市| 永济市| 富源县| 安徽省| 定兴县| 信丰县| 富宁县| 五寨县| 东安县| 双流县| 蓬安县| 广河县| 刚察县| 永昌县| 曲阳县|