1、目的
为其他对象提供一种代理以控制对这个对象的访问
2、分类
静态代理和动态代理
静态代理
简单示例:
public interface IUser {
void buy();
}
public class User implements IUser{
@Override
public void buy() {
System.out.println("买东西");
}
}
public class UserProxy implements IUser{
IUser user ;
public UserProxy(IUser user) {
this.user = user;
}
@Override
public void buy() {
System.out.println("机器人去");
user.buy();
System.out.println("机器人买回来");
}
}
动态代理
简单示例:
public class DynamicUserProxy implements InvocationHandler{
private Object object;
public DynamicUserProxy(Object object) {
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("处理前");
Object obj = method.invoke(object, args);
System.out.println("处理后");
return obj;
}
}
public class Test {
public static void main(String[] args) {
IUser user = new User();
System.out.println("---------代理前---------");
user.buy();
System.out.println("---------代理后---------");
IUser proxyUser = (IUser) Proxy.newProxyInstance(IUser.class.getClassLoader(),
new Class[] {IUser.class}, new DynamicUserProxy(user));
proxyUser.buy();
}
}