什么是代理模式
为什么使用代理模式
静态代理
不使用代理时,直接调用对象的方法,使用代理后,通过代理调用对象的方法,同时可以在方法前后添加操作.
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); }
来源:https://www.cnblogs.com/l1057618497/p/12246634.html