001 代理

1.IProgrammer接口

package base.tunie.designpattern.proxy;
/**
 * @author:Xie Jun
 * @date: 2014-4-19 下午3:28:19
 * @Desc:程序员
 */
public interface IProgrammer {
	/**
	 * 返回最擅长使用的语言
	 * @return String对象
	 */
	public void useLanguage();
}

2.AS3Programmer类

package base.tunie.designpattern.proxy;

import base.tunie.tools.test.Console;

/**
 * @author:Xie Jun
 * @date: 2014-4-19 下午3:31:51
 * @Desc:AS3 程序员
 */
public class AS3Programmer implements IProgrammer {

	@Override
	public void useLanguage() {
		Console.println("use ActionScript 3.0 language.");
	}

}

静态代理实现

3.ProgrammerProxy
package base.tunie.designpattern.proxy;

import base.tunie.tools.test.Console;

/**
 * @author:Xie Jun
 * @date: 2014-4-19 下午3:40:30
 * @Desc:
 */
public class ProgrammerProxy implements IProgrammer {
	private IProgrammer p;
	public ProgrammerProxy(IProgrammer p){
		this.p=p;
	}
	@Override
	public void useLanguage() {
		Console.println("事务处理之前 ");
		p.useLanguage();
		Console.println("事务处理之后");
	}

}

动态代理实现

4.ProgrammerProxyInvocationHandler

package base.tunie.designpattern.proxy;

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

import base.tunie.tools.test.Console;

/**
 * @author:Xie Jun
 * @date: 2014-4-19 下午3:47:45
 * @Desc:
 */
public class ProgrammerProxyInvocationHandler implements InvocationHandler {

	private Object target;
	
	public Object bind(Object target){
		this.target=target;
		return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(),this);
	}
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object result=null;
		Console.println("事务处理之前");
		result=method.invoke(target, args);
		Console.println("事务处理之后");
		return result;
	}

}

5.Console

package base.tunie.tools.test;
/**
 * @author:Xie Jun
 * @date: 2014-4-19 下午3:34:06
 * @Desc:后台打印相关
 */
public class Console {
	
	/**
	 * 后台打印一个对象
	 * @param t
	 */
	public static <T> void print(T t){
		System.out.print(t);
	}
	/**
	 * 后台打印一个对象,并换行
	 * @param t
	 */
	public static <T> void println(T t){
		System.out.println(t);
	}
	/**
	 * 后台打印一个对象,并换行
	 * @param t
	 */
	public static void println(){
		System.out.println();
	}
	
}

6.ProxyText

package base.tunie.designpattern.proxy;

import base.tunie.tools.test.Console;


/**
 * @author:Xie Jun
 * @date: 2014-4-19 下午3:27:13
 * @Desc:代理测试类
 */
public class ProxyText {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Console.println("静态代理,由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了");
		IProgrammer p=new AS3Programmer();
		p=new ProgrammerProxy(p);
		p.useLanguage();
		
		Console.println();
		Console.println("动态代理,在程序运行时,运用反射机制动态创建而成");
		ProgrammerProxyInvocationHandler ppih=new ProgrammerProxyInvocationHandler();
		IProgrammer p2=(IProgrammer)ppih.bind(new AS3Programmer());
		p2.useLanguage();
	}

}



7.运行结果如下图所示






转载于:https://my.oschina.net/tunie/blog/224145

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值