vjame

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

          代理模式

            代理模式

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

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

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

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

          抽象主題角色: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 //真實(shí)的主題角色(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 閱讀(277) 評論(0)  編輯  收藏 所屬分類: 設(shè)計模式


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 社旗县| 吴桥县| 个旧市| 通河县| 清苑县| 台安县| 黄平县| 彭阳县| 宿松县| 晋宁县| 若羌县| 江达县| 喀什市| 福贡县| 敦煌市| 莎车县| 雷波县| 正阳县| 河北省| 湟源县| 长汀县| 和平区| 龙山县| 鄄城县| 且末县| 隆昌县| 枣阳市| 孟村| 巨野县| 南昌县| 迭部县| 屯留县| 乳山市| 青海省| 霞浦县| 禹城市| 昌乐县| 绥棱县| 漠河县| 宝坻区| 焉耆|