设计模式-代理模式

文章目录

ProxySubject和RealSubject 共同实现了Subject类,首先RealSubject 实现Subject类是必要的,其次ProxySubject里面组合了一个RealSubject 是为了调用RealSubject 里面的Request方法,在一个增强方法里面调用Request方法,可以在Request方法前后增加代码进行增强

gitee仓库代码

https://gitee.com/he-weigang/design-pattern---proxy-pattern.git

ProxyPatternDemo

java 复制代码
/**
 * 代理模式演示
 */
public class ProxyPatternDemo {
    public static void main(String[] args) {
        System.out.println("=== 代理模式演示 ===");
        
        ProxySubject proxy = new ProxySubject();
        
        // 1. 原始版本
        System.out.println("\n--- 原始版本 ---");
        proxy.request();
        
        // 2. 增强版本
        System.out.println("\n--- 增强版本 ---");
        proxy.enhancedRequest();
    }
}

ProxySubject

java 复制代码
/**
 * 代理类
 */
public class ProxySubject implements Subject {
    private RealSubject realSubject;
    /**
     * 原始未增强
     * */
    @Override
    public void request() {
        // 延迟初始化
        if (realSubject == null) {
            realSubject = new RealSubject();
        }
        
        // 前置处理
        System.out.println("代理:前置处理");
        
        // 调用真实对象
        realSubject.request();
        
        // 后置处理
        System.out.println("代理:后置处理");
    }
    
    /**
     * 增强版本 - 添加性能监控
     */
    public void enhancedRequest() {
        if (realSubject == null) {
            realSubject = new RealSubject();
        }
        
        long startTime = System.currentTimeMillis();
        System.out.println("代理:开始执行,记录性能");
        
        realSubject.request();
        
        long endTime = System.currentTimeMillis();
        System.out.println("代理:执行完成,耗时:" + (endTime - startTime) + "ms");
    }

}

RealSubject

java 复制代码
/**
 * 真实主题类
 */
public class RealSubject implements Subject {
    @Override
    public void request() {
        System.out.println("执行真实对象的请求操作");
    }
}

Subject

java 复制代码
/**
 * 抽象主题接口
 */
public interface Subject {
    void request();
}
相关推荐
灰子学技术1 天前
Envoy 使用的设计模式技术文档
设计模式
Carl_奕然1 天前
【智能体】Agent的四种设计模式之:ReAct
人工智能·设计模式·语言模型
二哈赛车手1 天前
新人笔记---多策略搭建策略执行链实现RAG检索后过滤
java·笔记·spring·设计模式·ai·策略模式
楼田莉子1 天前
仿Muduo的高并发服务器:Channel模块与Poller模块
linux·服务器·c++·学习·设计模式
qq_三哥啊2 天前
【mitmproxy】提取 OpenCode 的 API 接口
网络·代理模式
geovindu2 天前
go: Strategy Pattern
开发语言·设计模式·golang·策略模式
qq_三哥啊2 天前
【mitmproxy】通过 mitmproxy 的本地捕获代理模式获取 OpenCode 发起的 AI API 请求的详细信息
网络·系统安全·代理模式
嵌入式学习_force2 天前
02_state
设计模式·蓝牙
qcx232 天前
Warp源码深度解析(七):Token预算策略——双轨计费、上下文溢出与摘要压缩
人工智能·设计模式·rust·wrap
Cosolar3 天前
提示词工程面试题系列 - Zero-Shot Prompting 和 Few-Shot Prompting 的核心区别是什么?
人工智能·设计模式·架构