简谈设计模式之代理模式

代理模式是一种结构型设计模式, 主要用于为其他对象提供一种代理, 以控制对这个对象的访问. 代理模式可以在不修改目标对象的前提下, 通过代理对象在访问目标对象之前或之后增加额外的操作

代理模式结构
  1. 抽象主题: 定义了真实主题和代理的共同接口, 这样客户端就可以通过接口来使用真实主题和代理
  2. 真实主题: 定义了代理所代表的真实对象, 是实际进行业务操作的对象
  3. 代理: 持有对真实主题的引用, 控制对真实主题的访问, 可以在访问真实主题时增加额外的操作
代理模式分类
  1. 远程代理: 为一个位于不同地址空间的对象提供本地代表
  2. 虚拟代理: 根据需要创建开销较大的对象, 通过代理来控制对象的访问和延迟初始化
  3. 保护代理: 控制对原始对象的访问, 用于对象有不同访问权限的场景
  4. 智能指引: 在访问实际对象时进行一些额外操作, 例如引用计数, 日志记录等
代理模式实现
java 复制代码
// 抽象主题
public interface Subject {
	void request();
}

// 真实主题
public class RealSubject implements Subject {
    @Override
    public void request() {
        System.out.println("RealSubject: Handling request.");
    }
}

// 代理类
public class Proxy implements Subject {
    private RealSubject realSubject;
    
    @Override
    public void request() {
        if (realRequest == null) {
            realRequest = new RealRequest();
        }
        preRequest();
        realSubject.request();
        postRequest();
    }
    
    private void preRequest() {
        System.out.println("Proxy: Pre-processing before forwarding request to RealSubject");
    }
    
    private void postRequest() {
        System.out.println("Proxy: Post-processing after RealSubject handled request);
    }
}
                           
// 客户端代码
public class Client {
    public static void main(String[] args) {
        Subject proxy = new Proxy();
        proxy.request();
    }
}

优点:

  • 职责清晰: 代理模式将真实对象和控制访问的代理对象分离, 使得职责更加清晰
  • 透明性: 客户端可以透明地使用代理对象而不需要知道真实对象的存在
  • 控制访问: 代理可以在不修改真实对象的情况下修改对真实对象的访问

缺点:

  • 增加复杂性: 由于引入了代理对象, 会增加系统的复杂性
  • 性能开销: 代理模式可能会增加系统的性能开销, 尤其是远程代理或虚拟代理, 因为它们会增加额外的网络通信或延迟
相关推荐
silvamux_5 分钟前
4款新模型商务邮件翻译横评:0.98到0.46
android·java·javascript
Dovis(誓平步青云)27 分钟前
车辆进入隧道后信号断开,座舱旅程怎样补回事件
java·开发语言·前端·数据库·电脑
砚底藏山河28 分钟前
数据新鲜度 SLA 监控
java·大数据·python·maven
杨杨杨大侠9 小时前
都能接模型、RAG 和 MCP,Java Agent 框架到底差在哪?
java
Thinker QAQ10 小时前
并发编程(九):BlockingQueue 与 Channel——语言层的原子性、可见性与有序性
java·python·go·并发编程·channel·blockingqueue·message passing
霸道流氓气质11 小时前
RAG 可观测性与生产监控实战:四层遥测模型、五大仪表盘与 OpenTelemetry 全链路追踪的 Java 生产级实现
java·人工智能·python
AOI小白新手上路12 小时前
autodl常用的tar 打包下载(数据集)命令手册:逐段拆解与套用模板
java·大数据·数据库
dishugj13 小时前
系统架构风险点、敏感点和权衡点的概念和区分
java·开发语言
高晶13 小时前
ARM 嵌入式 Linux 系统启动流程实战指南
设计模式·程序员