使用Java写一个代理模式
时间: 2023-07-20 18:29:02 浏览: 47
代理模式是一种常用的设计模式,用于为其他对象提供一种代理以控制对该对象的访问。下面是使用Java语言实现代理模式的示例:
首先,我们定义一个接口`Image`,代表图片对象:
```java
public interface Image {
void display();
}
```
然后,我们实现`RealImage`类,该类实现了`Image`接口,用于加载并显示图片:
```java
public class RealImage implements Image {
private String filename;
public RealImage(String filename) {
this.filename = filename;
loadImageFromDisk();
}
private void loadImageFromDisk() {
System.out.println("Loading " + filename);
}
public void display() {
System.out.println("Displaying " + filename);
}
}
```
接下来,我们实现`ProxyImage`类,该类也实现了`Image`接口,但它实现了延迟加载的方式,只有在需要显示图片时才会加载并显示真实的图片:
```java
public 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();
}
}
```
最后,我们可以创建一个客户端程序来测试代理模式:
```java
public class ProxyPatternDemo {
public static void main(String[] args) {
Image image = new ProxyImage("test.jpg");
// 图片将在需要时被加载
image.display();
System.out.println("");
// 图片不需要重新加载
image.display();
}
}
```
输出结果如下:
```
Loading test.jpg
Displaying test.jpg
Displaying test.jpg
```
通过使用代理模式,我们可以在不改变原有代码的情况下,控制对对象的访问。在上述示例中,`ProxyImage`类充当了`RealImage`对象的代理,实现了延迟加载的效果,从而提高了程序的性能。