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

相关推荐
别致的影分身39 分钟前
Linux 线程池
java·开发语言·jvm
山山而川粤3 小时前
母婴用品系统|Java|SSM|JSP|
java·开发语言·后端·学习·mysql
迷失蒲公英4 小时前
XML与Go结构互转实现(序列化及反序列化)
xml·开发语言·golang
测试盐4 小时前
c++编译过程初识
开发语言·c++
赖赖赖先生4 小时前
fastadmin 框架 生成qr code 二维码图片,PHP 7.4版本
开发语言·php
字节流动5 小时前
Android Java 版本的 MSAA OpenGL ES 多重采样
android·java·opengles
玉红7775 小时前
R语言的数据类型
开发语言·后端·golang
夜斗(dou)5 小时前
node.js文件压缩包解析,反馈解析进度,解析后的文件字节正常
开发语言·javascript·node.js
觅远5 小时前
python+PyMuPDF库:(一)创建pdf文件及内容读取和写入
开发语言·python·pdf
呜呼~225146 小时前
前后端数据交互
java·vue.js·spring boot·前端框架·intellij-idea·交互·css3