隨筆-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 心夢帆影 閱讀(5859) 評論(2)  編輯  收藏 所屬分類: JavaSE

          評論:
          # re: Java的代理模式(通過公共接口實現) 2010-04-02 09:24 | wangchangbing
          很簡單的例子   回復  更多評論
            
          # re: Java的代理模式(通過公共接口實現) 2011-10-13 20:18 | andysuo
          介紹的很不錯,新手一看就明白  回復  更多評論
            
          主站蜘蛛池模板: 新巴尔虎左旗| 和静县| 法库县| 广平县| 黔西县| 古蔺县| 柳河县| 宜阳县| 乐陵市| 蓝田县| 安达市| 兖州市| 德保县| 德格县| 德钦县| 昌江| 葫芦岛市| 钟祥市| 汨罗市| 无棣县| 靖宇县| 易门县| 丹东市| 丽江市| 德州市| 兰州市| 兴业县| 苏尼特左旗| 扶余县| 利川市| 体育| 金乡县| 合江县| 车险| 铅山县| 池州市| 山阴县| 辉县市| 长泰县| 双江| 大埔县|