`
ghyghoo8
  • 浏览: 190751 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

动态代理-实例

    博客分类:
  • jase
阅读更多
package com.DynamicProxy;
//抽象角色
public interface BuyTicket {

	public Ticket gettrick(String dest);
	
}


package com.DynamicProxy;

//具体角色
public class NormalBuyTicket implements BuyTicket{
	NormalBuyTicket(){
		System.out.println("fuck");
	}

	public Ticket gettrick(String dest) {
		System.out.println("哪儿的票:");
		System.out.println("售票处买到");
		return new Ticket();
		
	}
	

}

# //method.invoke(obj)等同于NormalBuyTicket.gettrick(); 
#         //method.invoke(obj,args)等同于NormalBuyTicket.gettrick(参数); 
#         //Object ret = method.invoke(obj,args)等同于NormalBuyTicket.gettrick(参数),有返回值

package com.DynamicProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

//代理角色。动态代理的代理角色要实现代理类的接口,而不是抽象角色.
//客户端用proxy类(动态代理类)来和代理角色沟通,类似于静态代理的代理类
public class proxybuy implements InvocationHandler{
private Object obj;
String name;
	public proxybuy(){}
	public proxybuy(Object obj,String name){
		this.obj=obj;
		this.name=name;
	}
	
	


	//代理行为
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		System.out.println("代理前"+method);
		System.out.println("黄牛党办理");
		Object ret = method.invoke(obj,args);//放入被代理对象,抽象代理的方法,方法参数
		
		[color=red][size=x-large]//method.invoke(obj)等同于NormalBuyTicket.gettrick();
		//method.invoke(obj,args)等同于NormalBuyTicket.gettrick(参数);
		//Object ret = method.invoke(obj,args)等同于NormalBuyTicket.gettrick(参数),有返回值[/size][/color]
		System.out.println("代理后"+method);
		return ret;
	}

}





package com.DynamicProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

import com.DynamicProxy.BuyTicket;
import com.DynamicProxy.proxybuy;
//测试类
public class testpy {
	public static void main(String[] args){
		BuyTicket buyy=new NormalBuyTicket();//呼叫被代理类
		InvocationHandler ds = new proxybuy(buyy,"杭州");//初始化代理类
	    
		BuyTicket pys=(BuyTicket) Proxy.newProxyInstance(buyy.getClass().getClassLoader(), buyy.getClass().getInterfaces(), ds);
		Ticket ticket = pys.gettrick("hangzhou");
		System.out.println("ticket is : " + ticket);
		
		
		System.out.println("hello你好".getBytes().length);
	}
//	String a=new String("anc");
	
}
//------------------------------------------
package com.DynamicProxy;

public class Ticket {

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics