代理模式笔记

什么是代理模式

为什么使用代理模式

静态代理

不使用代理时,直接调用对象的方法,使用代理后,通过代理调用对象的方法,同时可以在方法前后添加操作.
interface IAct{
	void act(int money);
}
class Actor implements IAct{
	public void act(int money) {
		System.out.println("收到"+money+"元,开始表演");
	}
}
class ProxyActor implements IAct{
	IAct actor;
	ProxyActor(IAct actor){
		this.actor=actor;
	}
	@Override
	public void act(int money) {
		// TODO Auto-generated method stub
		System.out.println("代理前的工作");
		actor.act(money);
		System.out.println("代理后的工作");
	}
	
}
public class ProxyPattern {
	public static void main(String[] args) {
		//不使用代理
		IAct ac=new Actor();
		ac.act(100);
		//使用代理后
		IAct proxy=new ProxyActor(ac);
		proxy.act(100);
	}
}

动态代理

在运行时为对象创建代理类.
public static void main(String[] args) {
		
		//动态代理
		IAct proxyActor=(IAct)Proxy.newProxyInstance(ac.getClass().getClassLoader(),
														 ac.getClass().getInterfaces(),
														 new InvocationHandler() {

															@Override
															public Object invoke(Object proxy, Method method,
																	Object[] args) throws Throwable {
																int money=(int)args[0];
																System.out.println("代理前的工作");																
																method.invoke(ac,money/2 );    //第一个参数是方法对象, 后面的是方法形参
																System.out.println("代理后的工作");
																return null;
															}
			
		});
		proxyActor.act(100);
	}

posted @ 2020-01-31 20:39  少年留不住  阅读(179)  评论(0编辑  收藏  举报