什么是代理模式
为什么使用代理模式
静态代理
不使用代理时,直接调用对象的方法,使用代理后,通过代理调用对象的方法,同时可以在方法前后添加操作.
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);
}