代理模式是一种结构型设计模式,它允许一个对象(代理)作为另一个对象(真实对象)的接口来控制访问。代理对象可以在不改变真实对象的情况下,添加一些额外的功能,例如延迟加载、访问控制、缓存等。
以下是一个简单的 Java 代理模式示例,使用一个虚拟代理来控制对真实图片对象的访问。虚拟代理会在需要时延迟加载真实图片对象。
// 定义一个共享的图片接口
interface Image {
void display();
}
// 创建真实图片类
class RealImage implements Image {
private String filename;
public RealImage(String filename) {
this.filename = filename;
loadImageFromDisk();
}
private void loadImageFromDisk() {
System.out.println("Loading image from disk: " + filename);
}
public void display() {
System.out.println("Displaying image: " + filename);
}
}
// 创建代理图片类
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 ProxyPatternExample {
public static void main(String[] args) {
// 创建代理图片对象
Image image = new ProxyImage("sample.jpg");
// 第一次显示图片 - 会加载真实图片对象
image.display();
// 第二次显示图片 - 不会再加载真实图片对象
image.display();
}
}