代理模式:控制对象访问

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

代码示例:

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

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

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

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

相关推荐
biyezuopinvip3 小时前
基于Spring Boot的企业网盘的设计与实现(任务书)
java·spring boot·后端·vue·ssm·任务书·企业网盘的设计与实现
脸大是真的好~3 小时前
EasyExcel的使用
java·excel
小宋10213 小时前
Java 项目结构 vs Python 项目结构:如何快速搭一个可跑项目
java·开发语言·python
JavaGuide4 小时前
一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!
java·spring boot
吃虫子的人4 小时前
记录使用Arthas修改线上源码重新加载的一次过程
java·arthas
figo10tf4 小时前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端
zhangyi_viva4 小时前
Spring Boot(七):Swagger 接口文档
java·spring boot·后端
橙露4 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
小程故事多_804 小时前
Agent Infra核心技术解析:Sandbox sandbox技术原理、选型逻辑与主流方案全景
java·开发语言·人工智能·aigc