Wzorce projektowe - wzorzec zastępczy
We wzorcu proxy klasa reprezentuje funkcjonalność innej klasy. Ten typ wzorca projektowego jest objęty wzorem strukturalnym.
We wzorcu proxy tworzymy obiekt posiadający oryginalny obiekt, aby połączyć jego funkcjonalność ze światem zewnętrznym.
Realizacja
Zamierzamy stworzyć interfejs Image i konkretne klasy implementujące interfejs Image . ProxyImage to klasa proxy, która zmniejsza zużycie pamięci podczas ładowania obiektów RealImage .
ProxyPatternDemo , nasza klasa demonstracyjna, użyje ProxyImage, aby pobrać obiekt Image do załadowania i wyświetlenia zgodnie z potrzebami.
Krok 1
Utwórz interfejs.
Image.java
public interface Image {
void display();
}
Krok 2
Utwórz konkretne klasy implementujące ten sam interfejs.
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();
}
}
Krok 3
Użyj ProxyImage, aby uzyskać obiekt klasy RealImage, gdy jest to wymagane.
ProxyPatternDemo.java
public class ProxyPatternDemo {
public static void main(String[] args) {
Image image = new ProxyImage("test_10mb.jpg");
//image will be loaded from disk
image.display();
System.out.println("");
//image will not be loaded from disk
image.display();
}
}
Krok 4
Sprawdź dane wyjściowe.
Loading test_10mb.jpg
Displaying test_10mb.jpg
Displaying test_10mb.jpg