为其他对象提供一种代理以控制对这个对象的访问(如延迟加载、权限校验)。
代码示例:
java
// 1. 抽象接口
interface Image {
void display();
}
// 2. 真实对象(高开销)
class RealImage implements Image {
private final String filename;
public RealImage(String filename) {
this.filename = filename;
loadFromDisk(); // 模拟高成本操作
}
private void loadFromDisk() {
System.out.println("正在加载图像: " + filename);
}
@Override
public void display() {
System.out.println("显示图像: " + filename);
}
}
// 3. 代理类(控制访问)
class ProxyImage implements Image {
private RealImage realImage;
private final String filename;
public ProxyImage(String filename) {
this.filename = filename;
}
@Override
public void display() {
if (realImage == null) {
realImage = new RealImage(filename); // 延迟加载
}
realImage.display();
}
}
// 客户端调用
public class Client {
public static void main(String[] args) {
Image image = new ProxyImage("photo.jpg");
image.display();
}
}

**使用场景:**虚拟代理(延迟加载大文件)、保护代理(权限控制)、远程代理(网络请求封装)
**优点:**解耦客户与真实对象;增强安全性/性能
**缺点:**可能增加响应延迟;代码复杂度提高