代理模式:控制对象访问

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

代码示例:

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

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

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

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

相关推荐
SamDeepThinking1 小时前
从源码到代码:MyBatis-Flex 与 MyBatis-Plus 的逐项对比
java·后端·程序员
她的男孩4 小时前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
荣码6 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python
plainGeekDev7 小时前
Gson → kotlinx.serialization
android·java·kotlin
小bo波16 小时前
Java Swing 图形用户界面实验 —— 从算术练习到游戏开发的完整实践
java·课程设计·gui·游戏开发·扫雷·swing
咖啡八杯17 小时前
GoF设计模式——备忘录模式
java·后端·spring·设计模式
SamDeepThinking1 天前
裁掉那个差程序员后,给你看团队里高手的代码:这个习惯,希望你有
java·后端·程序员
朕瞧着你甚好1 天前
技术雷达 & Java 集成评估报告 — Apache Tika 3.3.1
java·ai编程