代理模式

接口

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();
}
相关推荐
只吃不吃香菜5 天前
Windows 下基于 YAML 规则的指定域名分流:以哔哩哔哩为例
网络·网络协议·计算机网络·网络安全·代理模式
zhongjunyao8 天前
Spec-Driven Development (SDD): The Definitive 2026 Guide
javascript·spring boot·python·eclipse·代理模式
FfHUCisI14 天前
Golang - 贪心算法 — 局部最优推导全局最优
贪心算法·golang·代理模式
雾喔16 天前
算法练习5
算法·代理模式
q5673152320 天前
人工智能训练数据采集:稳定代理IP高并发方案全解析
人工智能·爬虫·网络协议·tcp/ip·代理模式·代理ip
wuqingshun3141591 个月前
什么是代理模式?一般用在什么场景?
java·mysql·代理模式
我登哥MVP1 个月前
走进 Gang of Four 设计模式:代理模式
设计模式·代理模式
折哥的程序人生 · 物流技术专研1 个月前
Java 23 种设计模式:从踩坑到精通 | 番外:代理 vs 装饰器 —— Spring AOP 到底用了哪个?
java·代理模式·装饰器模式·java面试·java设计模式·springaop·从踩坑到精通
初学者,亦行者1 个月前
算法设计与分析3:贪心法 - 求解最短路径问题(TSP)
算法·代理模式
2501_916007471 个月前
iPad 怎么抓包 从代理模式到暴力抓包的操作方法
android·ios·小程序·uni-app·代理模式·iphone·ipad