代理模式:控制对象访问

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

代码示例:

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

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

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

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

相关推荐
木心爱编程几秒前
【Qt 5.14.2 新手实战】QTC++入门筑基——10 分钟做个文本编辑器:QLineEdit + QTextEdit 核心用法
java·c++·qt
楠枬2 分钟前
Nacos
java·spring·spring cloud·微服务
ShadowSmartMicros5 分钟前
SpringAi调用Mcp
java·ai
MediaTea6 分钟前
思考与练习(第四章 程序组成与输入输出)
java·linux·服务器·前端·javascript
kong79069288 分钟前
Java新特性-(四)方法与数组
java·数组·方法
麦麦鸡腿堡12 分钟前
Java_反射暴破创建对象与访问类中的成员
java·开发语言
大海星辰79813 分钟前
工厂模式与策略模式的深度实践:从代码优化到架构思考
java·架构·策略模式
Jack_abu15 分钟前
详解java中的线程间协作工具:CountDownLatch,Semaphore,CyclicBarrier(二)
java·并发编程·juc
miss_you121328 分钟前
结算模块设计
java
派大鑫wink30 分钟前
【Day1】Java 入门:开发环境搭建(JDK 安装 + IDEA 配置 + HelloWorld 实战)
java·开发语言·intellij-idea