Structural Pattern - Proxy Pattern
사용할 객체의 제어권을 위임함으로써, 객체에 대한 클라이언트의 요청을 대신 받아 전달합니다.
Porxy = 대리, 대신
원래 개체에 대한 액세스를 제어하므로 요청이 원래 객체에 전달되기 전이나 후에 수행할 수 있다.
Service
객체의 레퍼런스 필드를 가진다.Service
에게 기대하는 일을 Proxy
에게 전달한다.ServiceInterface
public interface Image {
void displayImage();
}
Service
public class RealImage implements Image {
private String filename;
public RealImage(String filename) {
this.filename = filename;
loadImageFromDisk();
}
private void loadImageFromDisk() {
System.out.println("Load " + filename);
}
@Override
public void displayImage() {
System.out.println("Display " + filename);
}
}
Proxy
public class ProxyImage implements Image {
private String filename;
private Image image;
public ProxyImage(String filename) {
this.filename = filename;
}
@Override
public void displayImage() {
if (image == null) {
image = new RealImage(filename);
}
image.displayImage();
}
}
Client
public class Client {
public static void main(String[] args) {
Image image1 = new ProxyImage("abc.png");
Image image2 = new ProxyImage("xyz.png");
image1.displayImage();
image1.displayImage();
image2.displayImage();
image2.displayImage();
}
}
Console
Load abc.png
Display abc.png
Display abc.png
Load xyz.png
Display xyz.png
Display xyz.png