设计模式 - 代理模式Proxy

设计思想:

举个通俗的例子,你想找某局长帮你做一件事情,但局长官位显赫,你又不能轻易见着,你就想到了找他的秘书,通过她传话给局长,这样你就等于请他的秘书帮你办成了那件事。秘书为什么就可以找到局长呢,因为秘书和局长之间有一定的关系。这里产生了四个对象:你、秘书、局长、秘书-局长(关系)。JAVA中同样有代理关系,我们叫做代理模式

代理模式就是为对象提供一个替身,来控制对这个对象的访问,这样的好处是,在目标对象实现的基础上,可以扩展目标对象的功能。通常被代理的对象是远程对象、开销较大的或者需要安全控制的对象。

实现原理:

1、实现被代理的接口

2、通过构造函数接受一个被代理的接口实现类

3、调用被代理的接口实现类,在调用前后添加相应的操作才增强功能。

实践:

前面工厂模式中,我们通过工厂模式优化了代理沙箱的创建,现在我们需要在调用代码沙箱时记录一下调用日志,原来我们需要在每个代码沙箱的实现类中去编写日志代码,代码重复率高,我们可以创建一个代理类来统一帮我们实现。

java 复制代码
@Slf4j
public class CodeSandboxProxy implements CodeSandbox {

    private final CodeSandbox codeSandbox;


    public CodeSandboxProxy(CodeSandbox codeSandbox) {
        this.codeSandbox = codeSandbox;
    }

    @Override
    public ExecuteCodeResponse executeCode(ExecuteCodeRequest executeCodeRequest) {
        log.info("代码沙箱请求信息:" + executeCodeRequest.toString());
        ExecuteCodeResponse executeCodeResponse = codeSandbox.executeCode(executeCodeRequest);
        log.info("代码沙箱响应信息:" + executeCodeResponse.toString());
        return executeCodeResponse;
    }
}

这样调用的时候,我们通过代理类去调用即可,其他并没有变化:

java 复制代码
CodeSandbox codeSandbox = CodeSandboxFactory.newInstance(type);
codeSandbox = new CodeSandboxProxy(codeSandbox);
相关推荐
时代观察者1 小时前
2026年瑞士TESA代理商盘点:行业前五强,谁在领跑精密测
代理模式
Yu_Lijing2 小时前
基于C++的《Head First设计模式》笔记——备忘录模式
c++·笔记·设计模式·备忘录模式
无籽西瓜a3 小时前
【西瓜带你学设计模式 | 第二期-观察者模式】观察者模式——推模型与拉模型实现、优缺点与适用场景
java·后端·观察者模式·设计模式
我真会写代码7 小时前
Java程序员常用设计模式详解(实战版)
java·开发语言·设计模式
无籽西瓜a8 小时前
【西瓜带你学设计模式 | 第一期-单例模式】单例模式——定义、实现方式、优缺点与适用场景以及注意事项
java·后端·单例模式·设计模式
cliffordl18 小时前
设计模式(python)
python·设计模式
云道轩20 小时前
告诉 Claude Code 在项目中遵循特定的编程模式/设计模式和技术栈约束
设计模式·ai·agent·claude code
花间相见1 天前
【Java基础面试题】—— 核心知识点面试题(含答案):语法+集合+JVM+设计模式+算法
java·jvm·设计模式
朱一头zcy1 天前
设计模式入门:最简单的模板方法模式
笔记·设计模式·模板方法模式
君主黑暗1 天前
设计模式-观察者模式
观察者模式·设计模式