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 閱讀(272) 評論(0)  編輯  收藏 所屬分類: 設計模式


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


          網站導航:
           
          主站蜘蛛池模板: 西乌| 余干县| 阳山县| 韶关市| 迁西县| 桃江县| 湄潭县| 岗巴县| 昆明市| 台湾省| 会宁县| 台北县| 中江县| 冕宁县| 平舆县| 中方县| 托克托县| 灵石县| 阿巴嘎旗| 金阳县| 舞阳县| 库尔勒市| 盐亭县| 西青区| 商城县| 砚山县| 乌兰浩特市| 襄垣县| 邹平县| 山阳县| 麦盖提县| 桓台县| 老河口市| 青海省| 嘉定区| 调兵山市| 乐清市| 仁化县| 吉安市| 威海市| 泗阳县|