美麗涵涵童裝店--說我博客名字,給你們打折!
          隨筆 - 82  文章 - 266  trackbacks - 0
          <2007年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456


          點擊這里給楊愛友發消息
          美麗涵涵童裝店
          說我博客名字,給你們打折!

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章檔案

          好友的BLOG

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          代理模式:為其他對象提供一種代理以控制對這個對象的訪問。這種功能只有在編譯無法確定要實現哪個接口時才有必要使用。利用代理可以創建一個實現了一組接口的新類。代理類與被代理類必須實現同一個接口,代理對象是在運行時由調用處理器定義的新類,它有一個名字,如$Proxy0。代理對象一旦被創建,與虛擬機上的任何其他類沒有什么區別。

          給大家舉個比較簡單的例子:
          假如你買臺IBM的筆記本,IBM產家是不提供鼠標的.但是我們如果從代理商的手里買就有鼠標和送.
          很簡單的例子,寫幾個類來實現一下吧.
          1. 首先設計一個購買的接口代碼如下:(ComputerInterface.java)
          1 public interface ComputerInterface {
          2      public void buy();
          3 }
          4 

          2. 建一個電腦類實現購買的接口代碼如下:(Computer.java)  
           1 public class Computer implements ComputerInterface{
           2     private String pcName="IBMT60";
           3     private int pcPrice=17800;
           4     public String getPcName() {
           5         return pcName;
           6     }
           7     public void setPcName(String pcName) {
           8         this.pcName = pcName;
           9     }
          10     public int getPcPrice() {
          11         return pcPrice;
          12     }
          13     public void setPcPrice(int pcPrice) {
          14         this.pcPrice = pcPrice;
          15     }
          16     public void buy() {
          17     System.out.print("獲得筆記本電腦:"+pcName+"一臺");
          18     }
          19 }

          3. 再建設一個代理商的類:用來完成買電腦和贈送鼠標:(ComputerProxy.java)
           1 public class ComputerProxy {
           2     private ComputerInterface pci;
           3     public ComputerInterface getPci() {
           4         return pci;
           5     }
           6     public void setPci(ComputerInterface pci) {
           7         this.pci = pci;
           8     }
           9     public void buy(){
          10         pci.buy();
          11         System.out.println("贈送鼠標一個");
          12     }
          13 }

          4. 建一個主函數測試一下:(TestDemo.java)
          1 public class TestDemo {
          2     public static void main(String[] args) {
          3         ComputerProxy c1=new ComputerProxy();
          4         c1.setPci(new Computer());
          5         c1.buy();
          6     }
          7 }

          運行結果如下:
          獲得筆記本電腦:IBMT60一臺獲得鼠標一個
          以上就是代理功能的實現,由代理商銷售筆記本,并贈送鼠標.但是這樣的程序只適合是銷售IBM筆記本.那么如果要是其它品牌呢.所以我們來更改一個代理類.來實現動態的代理.

          5. 建立一個類代碼如下:(ComputerDynamicProxy.java)
           1 public class ComputerDynamicProxy implements InvocationHandler {
           2     /*
           3      * 調用處理器是實現了InvocationHandler接口的類對象,在這個接口中只有一個方法:
           4      * Object invoke(Object proxy,Method method,Object[] args);
           5      * 無論何時調用代理對象的方法,調用處理器的invoke()方法都會被調用,并向其傳遞Method對象和原始的參數。
           6      */ 
           7     private Object delegate;
           8     
           9     // 描述是誰的代理,也就是與那個類有關系
          10     public Object bind(Object delegate) {
          11         this.delegate = delegate;
          12         return Proxy.newProxyInstance(delegate.getClass().getClassLoader(),
          13                 delegate.getClass().getInterfaces(), this);
          14     }
          15 
          16     public Object invoke(Object proxy, Method method, Object[] args)
          17             throws Throwable {
          18         System.out.println("贈送鼠標一個!");
          19         Object result = method.invoke(delegate, args);
          20         return result;
          21     }
          22 }

          主函數修改如下:
                
          1 public class TestDemo {
          2     public static void main(String[] args) {
          3         ComputerDynamicProxy proxy = new ComputerDynamicProxy();
          4         ComputerInterface computer = (ComputerInterface) proxy.bind(new Computer());
          5         //返回一個代理類的實例,并非返回一個ComputerInterface對象,事實上他也不能被實例化不能有對象,返回的對象名可能為$computer
          6         computer.buy();
          7     }
          8 }
          9 

          就可以實現動態代理了.
          posted on 2007-09-04 01:15 楊愛友 閱讀(787) 評論(0)  編輯  收藏 所屬分類: java相關技術
          美麗涵涵童裝店
          親,說我博客名字,給你們打折!
          主站蜘蛛池模板: 清丰县| 金塔县| 滁州市| 古浪县| 肥西县| 义马市| 宜章县| 咸丰县| 绥江县| 旬邑县| 安阳县| 铁岭市| 玛纳斯县| 扎赉特旗| 清涧县| 黄山市| 通江县| 怀安县| 醴陵市| 格尔木市| 茂名市| 墨玉县| 建德市| 英山县| 盐津县| 玛多县| 大荔县| 涿鹿县| 崇礼县| 大名县| 滦南县| 乌拉特中旗| 华宁县| 九寨沟县| 林芝县| 湛江市| 嘉祥县| 冀州市| 久治县| 九龙坡区| 福清市|