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

相关推荐
chuan.bai20 小时前
Java RAG 实战(第 11 篇):RAG 知识工作台网页
java·开发语言·人工智能
离陌在学C#1 天前
C# 事件(Event)详解:从概念到实战
开发语言·c#
0x531 天前
网站通信(一)
java
Terra.K1 天前
Java异常学习[特殊字符]
java·开发语言·学习
葡萄城技术团队1 天前
InfluxDB 2\.x 深度解析:核心架构、Flux 函数与制造业落地指南(三)
java·开发语言·架构
Super 含1 天前
Android 启动优化(五):线程、GC 与 IO 为什么会拖慢启动?
java·服务器·数据库
counting money1 天前
Java IO流详解:从InputStream到文件操作实战
java·开发语言·python
wuyk5551 天前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法
峥无1 天前
从0到1手撕红黑树:封装实现 my_map 与 my_set(SGI-STL 源码级深度解析)
开发语言·c++·笔记·算法·stl
波特率1152001 天前
C++新特性---属性说明符与标准属性
开发语言·c++