Java基础之代理模式

原创 2015年07月08日 12:34:11

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 方法参数 
     */
	@Override
	public 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) ;  
	   }
}


版权声明:转载注明出处

相关文章推荐

Java设计模式之代理模式(基础篇)

代理模式就是为其他对象提供一种代理以控制对这个对象的访问的模式。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。换言之,就是在一些情况下,一个...

Java中三种代理模式源码+文档

  • 2017年11月01日 09:58
  • 1.11MB
  • 下载

java中的三种代理模式

  • 2017年05月03日 19:35
  • 7.39MB
  • 下载

JAVA基础10 设计模式:结构型模式(适配器 代理模式 桥接模式 享元模式 组合模式 装饰器模式)

结构型模式:  核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题 分类: 适配器模式 代理模式 桥接模式 装饰模式 组合模式 外观模式 享元模式 我们在学习中见过的场...

java代理模式

  • 2014年05月20日 09:40
  • 59KB
  • 下载

Java 静态代理模式

  • 2017年07月02日 19:40
  • 2KB
  • 下载

黑马程序员:Java基础总结----静态代理模式&动态代理

黑马程序员:Java基础总结 静态代理模式&动态代理  ASP.Net+Android+IO开发、.Net培训、期待与您交流! ...

代理模式java代码 Proxy(4)

  • 2009年04月22日 16:16
  • 13KB
  • 下载

Java代理模式例子

  • 2012年10月28日 00:00
  • 4KB
  • 下载

java基础与基础加强 动态代理/代理模式

代理模式一般涉及到的角色有 – 抽象角色:声明真实对象和代理对象的共同接口 – 代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何...
  • feipizi
  • feipizi
  • 2013年09月03日 18:17
  • 396
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java基础之代理模式
举报原因:
原因补充:

(最多只允许输入30个字)