文章目录
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();
}