定義
在代理模式(Proxy Pattern)中,一個類代表另一個類的功能。這種類型的設計模式屬于結構型模式。
在代理模式中,我們建立具有現有對象的對象,以便向外界提供功能接口。
實作
我們将建立一個 Image 接口和實作了 Image 接口的實體類。ProxyImage 是一個代理類,減少 RealImage 對象加載的記憶體占用。
ProxyPatternDemo,我們的示範類使用 ProxyImage 來擷取要加載的 Image 對象,并按照需求進行顯示。

image.png
步驟 1
建立一個接口。
Image.java
public interface Image {
void display();
}
步驟 2
建立實作接口的實體類。
RealImage.java
public class RealImage implements Image {
private String fileName;
public RealImage(String fileName){
this.fileName = fileName;
loadFromDisk(fileName);
}
@Override
public void display() {
System.out.println("Displaying " + fileName);
}
private void loadFromDisk(String fileName){
System.out.println("Loading " + fileName);
}
}
ProxyImage.java
public class ProxyImage implements Image{
private RealImage realImage;
private String fileName;
public ProxyImage(String fileName){
this.fileName = fileName;
}
@Override
public void display() {
if(realImage == null){
realImage = new RealImage(fileName);
}
realImage.display();
}
}
步驟 3
當被請求時,使用 ProxyImage 來擷取 RealImage 類的對象。
ProxyPatternDemo.java
public class ProxyPatternDemo {
public static void main(String[] args) {
Image image = new ProxyImage("test_10mb.jpg");
//圖像将從磁盤加載
image.display();
System.out.println("");
//圖像将無法從磁盤加載
image.display();
}
}
步驟 4
驗證輸出。
Loading test_10mb.jpg
Displaying test_10mb.jpg
Displaying test_10mb.jpg