設計模式之代理模式(轉)

           

          原帖地址 : http://blog.csdn.net/wdwgr/archive/2009/04/09/4060739.aspx

           

          一. 代理模式:

          代理模式就是給某一個對象提供一個代理對象,并由代理對象控制對源對象的引用。就是一個人或者一個機構代替另一個人或者另一個機構去采取一些行動。

           

          二. 代理模式所涉及到的角色:

          抽象角色:提供一種真實角色和代理角色所共有的接口

          真實角色:定義了代理角色要代理的真實對象

          代理角色:含有對真實角色的引用,通常在客戶端調用時代理對象都要在真實角色對象的基礎上增加一些真實角色所不能勝任的工作,而不只是簡單的含有真實角色的引用

           

          三. 舉例:

          跟MM在網上聊天,一開頭通??偸?#8220;hi”,“你好”, “你從哪里來?”, “你多大了”,等等這些話,真煩人,寫個程序為我做代理吧,凡是收到這些消息,都設置好了自動回復功能,接收到其他有價值的消息時在通知我回答,怎么樣,很酷吧,這都要歸功于這個代理類。

           

          代碼:

           

             1. /**
             2.  * 抽象角色,提供代理類和具體類的公共接口
             3.  * @author Administrator
             4.  *
             5.  */ 
             6. public interface Chat { 
             7.  
             8.     public void reply(String message); 
             9. } 
            10. /**
            11.  * 具體角色類,被代理的類
            12.  * @author Administrator
            13.  *
            14.  */ 
            15. public class MyChat implements Chat{ 
            16.  
            17.     public void reply(String message) { 
            18.      
            19.         System.out.println("需要我親自回復的內容。。。"); 
            20.     } 
            21. } 
            22. /**
            23.  * 代理類,持有被代理類的一個引用
            24.  * @author Administrator
            25.  *
            26.  */ 
            27. public class ChatProxy implements Chat{ 
            28.  
            29.     private MyChat mc = new MyChat(); 
            30.      
            31.     public void reply(String message) { 
            32.      
            33.         if(message.equals("hi,你好")) { 
            34.             System.out.println("hi, 你也好"); 
            35.         }else if(message.equals("你從哪里來?")){ 
            36.             System.out.println("我來自中國。。。"); 
            37.         }else if(message.equals("你多大了?")) { 
            38.             System.out.println("我今年22了。。。"); 
            39.         } 
            40.         else { 
            41.             mc.reply(message); 
            42.         } 
            43.     } 
            44. } 

           客戶端直接對代理類進行調用:

             1. public class ProxyTest { 
             2.  
             3.     public static void main(String[] args) { 
             4.         //直接調用代理類 
             5.         ChatProxy cp = new ChatProxy(); 
             6.          
             7.                 //代理類提供的實現 
             8.         cp.reply("hi,你好"); 
             9.                 //具體類提供的實現 
            10.         cp.reply("你喜歡我嗎?"); 
            11.     } 
            12. } 

          四. 總結:

          在某些情況下,客戶不想或者不能直接引用一個對象,這個時候就用到了代理類,代理對象可以再客戶和目標對象之間起到中介的作用,客戶端分辨不出代理對象與真實對象的區別,代理模式可以不知道真正的代理對象,而僅僅持有一個被代理對象的接口,這時候代理對象不能夠創建被代理對象,被代理對象必須有系統的其他角色代為創建并傳入。

          繼續努力,加油!

          posted on 2009-10-22 15:30 AK47 閱讀(153) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2009年10月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 和田市| 吉木萨尔县| 文昌市| 永定县| 大连市| 中阳县| 穆棱市| 竹山县| 乐山市| 天柱县| 新河县| 磐石市| 宜阳县| 铅山县| 松潘县| 石阡县| 开化县| 兴仁县| 平乡县| 临泉县| 保康县| 荣成市| 商水县| 卢湾区| 五原县| 恭城| 柳江县| 怀仁县| 高陵县| 古田县| 丹寨县| 芜湖县| 东莞市| 东丰县| 南部县| 古蔺县| 镇远县| 岑巩县| 富宁县| 黔江区| 克拉玛依市|