欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

JAVA的代理模式,

来源: javaer 分享于  点击 41905 次 点评:277

JAVA的代理模式,


  代理模式:为其他对象提供一种代理以控制对这个对象的访问.说白了就是,在一些情况下客户不想或不能直接引一个对象,而代理对象可以在客户和目标对象之间起到中介作用.去掉客户不能看到的内容和服务或都增添客户需要的额外服务. 给大家举个比较简单的例子: 假如你买台IBM的笔记本,IBM产家是不提供鼠标的.但是我们如果从代理商的手里买就有鼠标和送. 很简单的例子,写几个类来实现一下吧. 首先设计一个购买的接口代码如下:(ComputerInterface.java) package test.lyx; publicinterface ComputerInterface {     publicvoid buy(); } 建一个电脑类实现购买的接口代码如下:(Computer.java) package test.lyx; publicclass Computer implements ComputerInterface{     private String pcName="IBMT60";     privateintpcPrice=17800;     public String getPcName() {         returnpcName;     }     publicvoid setPcName(String pcName) {         this.pcName = pcName;     }     publicint getPcPrice() {         returnpcPrice;     }     publicvoid setPcPrice(int pcPrice) {         this.pcPrice = pcPrice;     }     publicvoid buy() {     System.out.print("获得笔记本电脑:"+pcName+"一台");     } } 再建设一个代理商的类:用来完成买电脑和赠送鼠标:(ComputerProxy.java package test.lyx; publicclass ComputerProxy {     private ComputerInterface pci;     public ComputerInterface getPci() {         returnpci;     }     publicvoid setPci(ComputerInterface pci) {         this.pci = pci;     }     publicvoid buy(){         pci.buy();         System.out.println("赠送鼠标一个");     } } 建一个主函数测试一下吧:(TestDemo.java package test.lyx; publicclass TestDemo {     publicstaticvoid main(String[] args) {         ComputerProxy c1=new ComputerProxy();         c1.setPci(new Computer());         c1.buy();     } } 运行结果如下: 获得笔记本电脑:IBMT60一台获得鼠标一个 以上就是代理功能的实现,由代理商销售笔记本,并赠送鼠标.但是这样的程序只适合是销售IBM笔记本.那么如果要是其它品牌呢.所以我们来更改一个代理类.来实现动态的代理. 建立一个类代码如下:(ComputerProxy2java package test.lyx; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; publicclass ComputerProxy2 implements InvocationHandler{     private Object delegate;     //描述是谁的代理,也就是与那个类有关系     public Object bind(Object delegate){         this.delegate=delegate;         return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(),this);     }     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {            System.out.println("赠送鼠标一个!");        Object result=method.invoke(delegate, args);        return result;     } } 然后在主函数中加上:         ComputerProxy2 c2=new ComputerProxy2();         ComputerInterface ci2=(ComputerInterface)c2.bind(new Computer());         ci2.buy(); 就可以实现动态代理了.    

相关文章

    暂无相关文章
相关栏目:

用户点评