Java 中代理设计模式,请用代码具体举例

代理设计模式是一种结构型设计模式,它允许你提供一个代理或者占位符以控制对其他对象的访问。以下是一个简单的 Java 示例,演示了代理设计模式的用法:

java 复制代码
// 定义一个接口
interface Image {
    void display();
}

// 创建一个实现了 Image 接口的具体类
class RealImage implements Image {
    private String filename;

    public RealImage(String filename) {
        this.filename = filename;
        loadFromDisk();
    }

    private void loadFromDisk() {
        System.out.println("Loading " + filename);
    }

    public void display() {
        System.out.println("Displaying " + filename);
    }
}

// 创建一个代理类,实现了 Image 接口
class ProxyImage implements Image {
    private RealImage realImage;
    private String filename;

    public ProxyImage(String filename) {
        this.filename = filename;
    }

    public void display() {
        if (realImage == null) {
            realImage = new RealImage(filename);
        }
        realImage.display();
    }
}

// 示例
public class Main {
    public static void main(String[] args) {
        // 使用代理显示图片
        Image image1 = new ProxyImage("cat.jpg");
        image1.display();

        // 图片已加载,再次显示图片,不需要重新加载
        Image image2 = new ProxyImage("dog.jpg");
        image2.display();
    }
}

在这个例子中,Image 接口定义了显示图片的方法 display(),RealImage 类是一个实现了 Image 接口的具体类,负责实际加载并显示图片。ProxyImage 类也实现了 Image 接口,并在其内部维护了一个 RealImage 对象的引用。当调用 display() 方法时,如果 RealImage 对象尚未创建,则会创建一个新的 RealImage 对象并调用其 display() 方法,否则直接调用已存在的 RealImage 对象的 display() 方法。

在 Main 类中,我们使用代理来加载和显示图片,当第一次显示图片时,代理会创建实际的图片对象并显示,而当再次显示同一张图片时,代理直接调用已存在的图片对象的显示方法,不需要重新加载。这样可以提高性能并延迟创建真实对象的时间。

相关推荐
小毅&Nora几秒前
【Java线程安全实战】⑨ CompletableFuture的高级用法:从基础到高阶,结合虚拟线程
java·线程安全·虚拟线程
码农小韩几秒前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习
冰冰菜的扣jio几秒前
Redis缓存中三大问题——穿透、击穿、雪崩
java·redis·缓存
木风小助理2 分钟前
`mapfile`命令详解:Bash中高效的文本至数组转换工具
开发语言·chrome·bash
yyy(十一月限定版)11 分钟前
初始matlab
开发语言·matlab
LawrenceLan12 分钟前
Flutter 零基础入门(九):构造函数、命名构造函数与 this 关键字
开发语言·flutter·dart
listhi52012 分钟前
基于MATLAB的支持向量机(SVM)医学图像分割方法
开发语言·matlab
小璐猪头13 分钟前
专为 Spring Boot 设计的 Elasticsearch 日志收集 Starter
java
hui函数17 分钟前
如何解决 pip install 编译报错 g++: command not found(缺少 C++ 编译器)问题
开发语言·c++·pip
Tisfy26 分钟前
网站访问耗时优化 - 从数十秒到几百毫秒的“零成本”优化过程
服务器·开发语言·性能优化·php·网站·建站