반응형

Design Patterns - Proxy Pattern


( 원문 위치 : http://www.tutorialspoint.com/design_pattern/proxy_pattern.htm )

프락시 패턴에서 클래스는 다른 클래스의 기능을 표현한다. 이 형태의 디자인 패턴은 구조적 패턴에 포함된다.
프락시 패턴에서 외부로 이것의 기능을 인터페이스하기 위한 오리지널 객체를 갖는 객체를 생성한다.

Implementation

Image 인터페이스와 Image인터페이스를 구현하는 구체적 클래스를 생성할 것이다. ProxyImage는 RealImage 객체가 로딩하는 메모리 공간을 감사시키기 위한 proxy클래스이다.
ProxyPatternDemo, demo 클래스는 필요한 것으로써 필요한 때 로드되고 디스플레이되기 위한 Image 객체를 얻기위해 ProxyImage를 사용할 것이다.
Proxy Pattern UML Diagram

Step 1

인터페이스를 생성한다.

Image.java

public interface Image {
   void display();
}

Step 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();
   }
}

Step 3

요청될 때 RealImage클래스의 객체를 얻기위해 ProxyImage를 사용한다.

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(); 	
   }
}

Step 4

결과를 확인한다.

Loading test_10mb.jpg
Displaying test_10mb.jpg

Displaying test_10mb.jpg


반응형

+ Recent posts