美麗涵涵童裝店--說我博客名字,給你們打折!
          隨筆 - 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 楊愛友 閱讀(793) 評論(0)  編輯  收藏 所屬分類: java相關技術
          美麗涵涵童裝店
          親,說我博客名字,給你們打折!
          主站蜘蛛池模板: 河曲县| 白城市| 渑池县| 禄劝| 裕民县| 那坡县| 宁城县| 虎林市| 新建县| 且末县| 通辽市| 连山| 维西| 湄潭县| 当阳市| 樟树市| 馆陶县| 越西县| 沅陵县| 兴安盟| 凯里市| 涟水县| 五峰| 象州县| 辽阳县| 增城市| 福海县| 宁安市| 湛江市| 福贡县| 香港 | 郧西县| 保康县| 喀什市| 夏津县| 仁怀市| 微博| 肥乡县| 阜城县| 江源县| 西乌珠穆沁旗|