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) ;  
	   }
}


版权声明:转载注明出处

.NET(c#)new关键字的三种用法

原文地址:http://www.cnblogs.com/cpcpc/archive/2011/04/27/2123020.html 三种用法如下: 在 C# 中,new 关键字...
  • puppet_master
  • puppet_master
  • 2016年03月04日 19:56
  • 2036

java中代理模式以及new和newInatance()的区别

在java开发过程中经常使用到代理模式,其中代理模式分为静态代理和动态代理。 代理模式主要通过代理来实现对外功能,但是代理类本身并不实现功能,主要通过调用被代理的对象来实现功能。 静态代理:已经写...
  • lnjphjh
  • lnjphjh
  • 2015年09月26日 18:25
  • 741

Java中new和不new的区别

例如以下两种情况 1.ArrayList InfoList=null; BookInfo bookinfo=null; bookinfo=test.getinfo();2.ArrayList ...
  • xujiangdong1992
  • xujiangdong1992
  • 2017年06月29日 15:06
  • 1303

性能监控的好工具 - NewRelic 简介

https://ruby-china.org/topics/22379 我们蝉游记服务器端性能监控一直用 http://newrelic.com/ ,用它的免费版本N长时间,有必要为好工具义务...
  • u011537073
  • u011537073
  • 2016年01月13日 19:13
  • 1883

java中new关键字和c++中的new有什么区别

java中new返回的对像引用,而c++中返回的是对像的实际地址。 没有delete的原因是java有垃圾回收机制,当一个对像没有被引用时,系统会自动将其清理掉(也就是系统自动执行了delete)。...
  • wangfei8348
  • wangfei8348
  • 2016年05月12日 14:40
  • 2485

Java中的new关键字和引用传参

先看看Java中如何使用new关键字创建一个对象的。
  • ten_sory
  • ten_sory
  • 2016年10月28日 23:37
  • 1234

java new 关键字到底做了什么?

一、关键字new概述         "new"可以说是Java开发者最常用的关键字,我们使用new创建对象,使用new并通过类加载器来实例化任何我们需要的东西,但你是否深入了解过new在编译的...
  • u010523770
  • u010523770
  • 2017年04月03日 18:30
  • 2439

Java 中的 new 和 C++ 中的 new 的区别

Java 中的 new 和 C++ 中的 new 的区别java中new返回对象引用(别名),而c++中返回的是对象的实际地址(指针)。 java中没有delete的原因是java有垃圾回收机制,当...
  • Lavi_Driver
  • Lavi_Driver
  • 2017年11月01日 02:44
  • 31

.net中new与override的区别

很多朋友对c#中的new与override并不陌生,都知道new是隐藏,override是重写,都是针对虚方法virtual的,但是具体怎样执行以及效果,我们下面一起看下 下面我们创建了两个类,一个是...
  • zx13525079024
  • zx13525079024
  • 2016年04月30日 07:58
  • 865

接口和抽象类可以被new嘛?——顺便总结内部类

背景:     最近有同事跟我说了他面试时遇到的问题,考官问:“接口和抽象类可以被new嘛?”。这可能不是考官的原话,但是据他表达考官大概就是这个意思了。听到这个问题,我的第一反应是肯定不行啊,直接...
  • HackerSaillen
  • HackerSaillen
  • 2015年08月04日 21:04
  • 9548
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java基础之代理模式
举报原因:
原因补充:

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