vjame

          優化代碼是無止境的
          隨筆 - 65, 文章 - 9, 評論 - 26, 引用 - 0
          數據加載中……

          代理模式

            代理模式

          代理模式又叫Proxy模式(英文)。所謂的代理,就是一個人或者一個機構代替另一個人或者另一個機構去做一些事情。(類似于中介或者代理商)。
          Windows操作系統里面的例子 eg: 快捷方式

          代理模式的結構

          代理模式所涉及的角色有:
          抽象主題角色:聲明了真實主題與代理主題的共同接口(共有的特性)
          代理主題角色:含有對真實主題角色的引用(操作真實主體對象),代理角色通常在將客戶端調用傳遞給真實主題對象的之前或者之后都會執行某些操作(方法),而不是只單純的返回真實的對象。
          真實主題角色:定義了代理角色所代表的真實對象。

          《西游記》中的代理模式
          高老莊的高家小姐,大徒弟孫悟空,未歸依我佛的八戒。
          悟空代替了高家小姐去和八戒見面,然后制服了八戒。

          抽象主題角色:Miss Gao 樣貌和舉止行為
          代理主題角色:孫悟空,擁有Miss Gao的樣貌和舉止行為,還有另外的一個功能(制服八戒)
          真是主體角色: Miss Gao



          在代理模式里,有一個很重要的東西
          動態代理
          自從JDK的版本到1.3以后,java語言通過java.lang.reflect庫中,提供了三個類來直接支持代理模式。
          分別是:Proxy,InvocoationHandler和Method。

          一個例子:電腦代理商
          抽象主題角色:SaleComputer
          代理主題角色:ComputerProxy
          真是主體角色:ComputerMaker

          時序圖:



           1 package org.jzkangta.proxydemo;
           2 
           3 abstract class SaleComputer{
           4     abstract public void SaleComputer();
           5 }
           6 //真實的主題角色(ComputerMaker)
           7 class ComputerMaker extends SaleComputer{
           8     public void SaleComputer(){
           9         System.out.println("賣出了一臺電腦。。。");
          10     }
          11 }
          12 //代理的主題角色(ComputerProxy)
          13 class ComputerProxy extends SaleComputer{
          14     ComputerMaker cm=null;
          15     public void youHui(){
          16         System.out.println("我給你優惠.");
          17     }
          18     public void giveMouse(){
          19         System.out.println("我還送你一個鼠標。。。");
          20     }
          21     public void SaleComputer(){
          22         youHui();
          23         giveMouse();
          24         if(cm==null){
          25             cm=new ComputerMaker();
          26         }
          27         cm.SaleComputer();
          28     }
          29 }
          30 public class ProxyDemo {
          31 
          32     
          33     public static void main(String[] args) {
          34         //SaleComputer sc=new ComputerMaker();
          35         SaleComputer sc=new ComputerProxy();
          36         sc.SaleComputer();
          37 
          38     }
          39 
          40 }
          41 

          源代碼 http://www.aygfsteel.com/Files/vjame/ProxyDemo.rar

          posted on 2008-10-29 17:04 lanjh 閱讀(278) 評論(0)  編輯  收藏 所屬分類: 設計模式


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


          網站導航:
           
          主站蜘蛛池模板: 五河县| 汕尾市| 新源县| 绍兴县| 马鞍山市| 株洲市| 全州县| 逊克县| 当阳市| 隆尧县| 饶阳县| 金山区| 新邵县| 江北区| 岑溪市| 新化县| 来安县| 周宁县| 苏尼特右旗| 大城县| 工布江达县| 化德县| 南部县| 五指山市| 桐城市| 盈江县| 永嘉县| 佛坪县| 淮安市| 重庆市| 锡林郭勒盟| 峨边| 湘阴县| 哈尔滨市| 汤原县| 南溪县| 垫江县| 玉门市| 黔东| 天峻县| 金秀|