代理模式

接口

java 复制代码
public interface UserService {
    void selectAll();
}

实现类(需要增加业务)

java 复制代码
public class UserServiceImpl implements UserService{
    @Override
    public void selectAll() {
        System.out.println("查询");
    }
}

静态代理

代理类

java 复制代码
public class UserProxy implements UserService {
    // 持有具体业务实现
    private UserService userService;
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
    @Override
    public void selectAll() {
        System.out.println("不改变原有代码,进行增强");
        // 执行原有逻辑
        userService.selectAll();
    }
}

测试

java 复制代码
public static void main(String[] args) {
    UserProxy userProxy = new UserProxy();
    // 代理具体业务实现
    userProxy.setUserService(new UserServiceImpl());
    // 执行增强业务
    userProxy.selectAll();
}

动态代理

代理类

java 复制代码
public class ProxyInvocationHandler implements InvocationHandler {
    // 持有具体业务实现
    private Object object;
    public void setUserService(Object object) {
        this.object= object;
    }
    public Object getProxy(){
        // 让代理类实现具体实现类(UserServiceImpl)的接口(UserService),并重写接口方法,返回代理对象
        return Proxy.newProxyInstance(this.getClass().getClassLoader(), object.getClass().getInterfaces(), this);
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("这里进行增强");
        // 代理类执行接口方法时,执行具体实现重写的方法
        return method.invoke(object, args);
    }
}

测试

java 复制代码
public static void main(String[] args) {
    ProxyInvocationHandler proxyInvocationHandler = new ProxyInvocationHandler();
    // 持有具体实现
    proxyInvocationHandler.setObject(new UserServiceImpl());
    // 获取代理对象(已实现具体实现的接口并重写接口方法)
    UserService proxy = (UserService) proxyInvocationHandler.getProxy();
    // 执行增强业务
    proxy.selectAll();
}
相关推荐
-dzk-3 小时前
【动态规划】LC 416.分割等和子集
算法·动态规划·代理模式
步行cgn3 天前
GoF 代理模式详解
代理模式
IPdodo_20 天前
住宅 IP 与数据中心 IP 到底差在哪:用 RDAP、BGP 和多源证据做工程判定
网络·网络安全·代理模式·ip
承渊政道25 天前
PR-Agent鸿蒙PC适配全记录:从Python服务端代理到ArkTS原生评审客户端
python·华为·代理模式·agent·harmonyos·pc端
kruptos1 个月前
动态规划:暴力递归如何变优雅?
代理模式·算法优化·斐波那契
ydd1001001 个月前
正则表达式匹配
正则表达式·代理模式
LayZhangStrive2 个月前
设计模式(二)装饰器模式、代理模式(待更新)
设计模式·代理模式·装饰器模式·后端开发
Lam Tang2 个月前
APS 系列文章10
java·代理模式
Lam Tang2 个月前
APS 系列文章 08
java·代理模式
wangjialelele2 个月前
动态规划DP经典题型总结(Java、C++):路径、子数组、子序列、背包问题详解
java·c++·算法·面试·动态规划·代理模式