Java基础之代理模式

来源:互联网 发布:淘宝卡 哪个好 编辑:程序博客网 时间:2024/06/11 04:47

Java中代理模式是使用比较广泛的一个模式;下面,我们来用一个VPN上网的一个简单例子来说明一下吧!


/*============================ * 代理模式:----常用的设计模式 *  *============================*/interface NetWork{public void browse();}class Real implements NetWork{//定义接口标准public void browse(){System.out.println("Real ...Operation");}};class Proxy implements NetWork{//代理中调用真实的服务private NetWork netWork;public Proxy(NetWork network){this.netWork=network;}//检查用户名public void check(){System.out.println("do check u passwd username");}public void browse(){this.check();//验证this.netWork.browse();//真实的操作}};public class ProxyDemo6 {//客户端调用代理服务     public static void main(String[] args){     NetWork net=null;          net=new Proxy(new Real());//指定代理操作         net.browse();     }}

代理服务中,我们主要是解决核心业务外的功能,比如登录的验证,加密等操作;核心业务是代理业务中的一环;采用这种模式最经典的就是登录;


动态代理

/**=========================== * 动态代理Demo *  *==========================*/package demoRefle0001;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;/** * 实现接口 * @author R * */interface Subject {public String  say(String name,int age);//定义say接口}class RealSubject implements Subject{   public String say(String name,int age){   return "姓名: "+name+"年龄:"+age;   }   }/** * 动态代理 * @author R * */class MyInvocationHandler implements InvocationHandler{    private Object obj;        /*     * 代理要 绑定的类     */    public Object bind(Object obj){      this.obj=obj;//真实主题类      System.out.println("1 这里是代理调用");      return Proxy.newProxyInstance(obj.getClass().getClassLoader(),                             obj.getClass().getInterfaces(),                             this);    }    /**     *Object proxy  代理对象     *Method  method 代理方法      *object[] args 方法参数      */@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {System.out.println("2 这里是代理调用");Object temp = method.invoke(this.obj, args);//获取调用方法 和参数return  temp ;}}public class DemoDymProxy {   public static void main(String[] args){  //绑定代理          Subject sub=(Subject)new MyInvocationHandler().bind(new RealSubject());          System.out.println("0 这里是代理调用");    String info = sub.say("李兴华",30) ;//调用代理invoke方法    System.out.println(info) ;     }}


0 0
原创粉丝点击