프록시 디자인 패턴을 이해하려고했습니다. 하지만 프록시 디자인 패턴의 사용법을 이해하지 못했습니다. 위키 피 디아에서이 코드 예제를 얻었습니다.프록시 디자인 패턴의 사용
interface Image {
public void displayImage();
}
//on System A
class RealImage implements Image {
private String filename = null;
/**
* Constructor
* @param filename
*/
public RealImage(final String filename) {
this.filename = filename;
loadImageFromDisk();
}
/**
* Loads the image from the disk
*/
private void loadImageFromDisk() {
System.out.println("Loading " + filename);
}
/**
* Displays the image
*/
public void displayImage() {
System.out.println("Displaying " + filename);
}
}
//on System B
class ProxyImage implements Image {
private RealImage image = null;
private String filename = null;
/**
* Constructor
* @param filename
*/
public ProxyImage(final String filename) {
this.filename = filename;
}
/**
* Displays the image
*/
public void displayImage() {
if (image == null) {
image = new RealImage(filename);
}
image.displayImage();
}
}
class ProxyExample {
/**
* Test method
*/
public static void main(String[] args) {
final Image IMAGE1 = new ProxyImage("HiRes_10MB_Photo1");
final Image IMAGE2 = new ProxyImage("HiRes_10MB_Photo2");
IMAGE1.displayImage(); // loading necessary
IMAGE1.displayImage(); // loading unnecessary
IMAGE2.displayImage(); // loading necessary
IMAGE2.displayImage(); // loading unnecessary
IMAGE1.displayImage(); // loading unnecessary
}
}
이 예에서는 두 번째로 dispalyImage를로드 할 필요가 없습니다. RealImage 객체에 직접 액세스하는 것조차 가능합니다.
final Image IMAGE1 = new RealImage("HiRes_10MB_Photo1");
final Image IMAGE2 = new RealImage("HiRes_10MB_Photo2");
IMAGE1.displayImage(); // loading necessary
IMAGE1.displayImage(); // loading unnecessary
IMAGE2.displayImage(); // loading necessary
IMAGE2.displayImage(); // loading unnecessary
IMAGE1.displayImage(); // loading unnecessary
이 패턴에서는 ProxyImage 클래스의 사용법을 이해해야합니다.
어떤 부분을 혼동하고 있습니까? –
여기에서 ProxyImage의 객체 인스턴스를 사용하여 다시로드하지 않고 이미지를 표시합니다. RealImage의 객체 인스턴스도 가지고 있다면 같은 것을 보관할 수 있습니다. 왜 이것이 패턴으로 간주 되는가? – Burusothman
Wikipedia의 패턴 예제를 조심하십시오. 자바에서 가장 많이 사용되는 패턴을 원하는 경우 [케이 HORSTMANN의 객체 지향 설계 및 패턴 (http://horstmann.com/design_and_patterns.html) 좋다. 해당 링크의 페이지에 소스 코드가 있습니다. – Fuhrmanator