美麗涵涵童裝店--說我博客名字,給你們打折!
          隨筆 - 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相關技術
          美麗涵涵童裝店
          親,說我博客名字,給你們打折!
          主站蜘蛛池模板: 敦化市| 佛教| 台北县| 九寨沟县| 依安县| 聊城市| 临澧县| 甘孜县| 富川| 天峻县| 汉沽区| 灵武市| 象州县| 永修县| 嘉义市| 师宗县| 长丰县| 馆陶县| 柞水县| 海安县| 普格县| 珲春市| 什邡市| 吴桥县| 明光市| 波密县| 寿宁县| 巫山县| 股票| 玉田县| 津市市| 沙坪坝区| 黔东| 阿鲁科尔沁旗| 平昌县| 贵州省| 咸丰县| 红安县| 惠安县| 广平县| 大悟县|