vjame

          優(yōu)化代碼是無止境的
          隨筆 - 65, 文章 - 9, 評論 - 26, 引用 - 0
          數(shù)據(jù)加載中……

          代理模式

            代理模式

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

          代理模式的結(jié)構(gòu)

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

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

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



          在代理模式里,有一個很重要的東西
          動態(tài)代理
          自從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("我給你優(yōu)惠.");
          17     }
          18     public void giveMouse(){
          19         System.out.println("我還送你一個鼠標(biāo)。。。");
          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 閱讀(272) 評論(0)  編輯  收藏 所屬分類: 設(shè)計模式


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 壤塘县| 望城县| 芜湖市| 日照市| 松桃| 浦县| 曲麻莱县| 凯里市| 蒲城县| 吐鲁番市| 无锡市| 乌海市| 绵竹市| 团风县| 民县| 宁乡县| 京山县| 禹城市| 新野县| 阜宁县| 鄂温| 沂水县| 温宿县| 湘乡市| 衡南县| 涞源县| 金山区| 塔城市| 秭归县| 罗定市| 江城| 额济纳旗| 元谋县| 白朗县| 土默特右旗| 洪洞县| 林州市| 洛阳市| 安化县| 嫩江县| 兰溪市|