java设计模式:代理模式

静态代理模式

public interface Counter {

	public int add(int a, int b);
	
}

public class CounterImpl implements Counter{

	public int add(int a, int b) {
		System.out.println("计算的结果是:" + (a+b));
		return a + b;
	}

}

public class CounterProxy implements Counter {

	private Counter counterImpl;
	
	public CounterProxy(Counter counterImpl){
		this.counterImpl = counterImpl;
	}

	public int add(int a, int b) {
		System.out.println("方法执行前添加的方法");
		counterImpl.add(a, b);
		System.out.println("方法执行后添加的方法");
		return 0;
	}
	
}

public class CounterStaticProxyTest {

	public static void main(String[] args) {
		CounterImpl c = new CounterImpl();
		CounterProxy proxy = new CounterProxy(c);
		proxy.add(1, 2);
	}

}

动态代理模式

public class CounterInvocationHandler implements InvocationHandler {

	private Object object;
	
	public CounterInvocationHandler(Object object){
		this.object = object;
	}
	
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		System.out.println("方法执行前操作");
		Object result = method.invoke(object, args);
		System.out.println("方法执行后操作");
		return result;
	}
	
}

public class CounterDynaProxyTest {

	public static void main(String[] args) {
		Counter c = new CounterImpl();
		InvocationHandler handle = new CounterInvocationHandler(c);
		Counter cp = (Counter)Proxy.newProxyInstance(handle.getClass().getClassLoader(), c.getClass().getInterfaces(), handle);
		cp.add(2, 3);
	}

}

cglib动态代理模式

public class CounterCglibProxy implements MethodInterceptor{

	private Object object;
	
	public Object getInstance(Object object){
		this.object = object;
		Enhancer enhancer = new Enhancer();
		enhancer.setSuperclass(this.object.getClass());
		enhancer.setCallback(this);
		return enhancer.create();
	}
	
	public Object intercept(Object object, Method m, Object[] args, MethodProxy proxy) throws Throwable {
		System.out.println("开始前");
		proxy.invokeSuper(object, args);
		System.out.println("开始后");
		return null;
	}

}

public class CounterCglibProxyTest {

	public static void main(String[] args) {
		CounterImpl c = (CounterImpl)new CounterCglibProxy().getInstance(new CounterImpl());
		c.add(3, 4);
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值