package testDesignPattern;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyDemo {
public static void main(String[] args) {
//静态代理
User user = new User();
UserProxy userProxy = new UserProxy(user);
userProxy.save();
//动态代理
ProxyFactory proxyFactory = new ProxyFactory(user);
IUser iUser = (IUser)proxyFactory.getProxyInstance();
iUser.save();
}
}
//静态代理
interface IUser {
void save();
}
class User implements IUser {
@Override
public void save() {
System.out.println("save");
}
}
class UserProxy implements IUser {
private User user;
public UserProxy(User user) {
this.user = user;
}
@Override
public void save() {
System.out.println("start...");
user.save();
System.out.println("end...");
}
}
//动态代理
class ProxyFactory{
private User user;
public ProxyFactory(User user) {
this.user = user;
}
public Object getProxyInstance(){
return Proxy.newProxyInstance(
user.getClass().getClassLoader(),
user.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("start2...");
Object invoke = method.invoke(user, args);
System.out.println("end2...");
return invoke;
}
});
}
}
设计模式-代理模式
最新推荐文章于 2024-01-06 11:32:36 发布