代理模式:控制对象访问

为其他对象提供一种代理以控制对这个对象的访问(如延迟加载、权限校验)。

代码示例:

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();
    }
}

**使用场景:**虚拟代理(延迟加载大文件)、保护代理(权限控制)、远程代理(网络请求封装)

**优点:**解耦客户与真实对象;增强安全性/性能

**缺点:**可能增加响应延迟;代码复杂度提高

相关推荐
Assby1 分钟前
如何尽可能精确计算线程池执行 shutdown() 后的耗时?
java·后端
焰火199925 分钟前
[Java]自定义重试工具类
java
SuperherRo1 小时前
JAVA攻防-Shiro专题&断点调试&有key利用链&URL&CC&CB&原生反序列化&加密逻辑
java·shiro·反序列化·有key·利用链·原生反序列化·加密逻辑
桦说编程2 小时前
简单方法实现子任务耗时统计
java·后端·监控
爱笑的眼睛112 小时前
超越可视化:降维算法组件的深度解析与工程实践
java·人工智能·python·ai
盖世英雄酱581362 小时前
物品超领取损失1万事故复盘(一)
java·后端
CryptoRzz2 小时前
印度尼西亚(IDX)股票数据对接开发
java·后端·websocket·web3·区块链
你怎么知道我是队长3 小时前
C语言---文件读写
java·c语言·开发语言
wszy18093 小时前
外部链接跳转:从 App 打开浏览器的正确姿势
java·javascript·react native·react.js·harmonyos