0
点赞
收藏
分享

微信扫一扫

代理模式Proxy

岁月不饶人老不正经 2024-08-20 阅读 22
代理模式

一、静态代理

1、优点
2、 缺点
3、示例
interface UserService {
    void addUser(String user);
}

class UserServiceImpl implements UserService {
    public void addUser(String user) {
        System.out.println("Add user: " + user);
    }
}

class UserServiceProxy implements UserService {
    private UserService userService;

    public UserServiceProxy(UserService userService) {
        this.userService = userService;
    }

    public void addUser(String user) {
        System.out.println("Logging: Adding user " + user);
        userService.addUser(user);
    }
}

二、动态代理

1、优点
2、 缺点
3、示例
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

interface UserService {
    void addUser(String user);
}

class UserServiceImpl implements UserService {
    public void addUser(String user) {
        System.out.println("Add user: " + user);
    }
}

class DynamicProxyHandler implements InvocationHandler {
    private Object target;

    public DynamicProxyHandler(Object target) {
        this.target = target;
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("Logging: Adding user " + args[0]);
        return method.invoke(target, args);
    }
}

public class Main {
    public static void main(String[] args) {
        UserService userService = new UserServiceImpl();
        UserService proxyInstance = (UserService) Proxy.newProxyInstance(
                UserService.class.getClassLoader(),
                new Class[]{UserService.class},
                new DynamicProxyHandler(userService)
        );
        proxyInstance.addUser("Alice");
    }
}

三、总结

举报

相关推荐

0 条评论