"프록시 패턴"의 두 판 사이의 차이

 
(사용자 2명의 중간 판 5개는 보이지 않습니다)
8번째 줄: 8번째 줄:


==예제==
==예제==
<source lang='java'>
<syntaxhighlight lang='java'>
interface Image {
interface Image {
     public void displayImage();
     public void displayImage();
28번째 줄: 28번째 줄:
     }
     }
   
   
     // 이미지 표시
     // 이미지 출력
     public void displayImage() {  
     public void displayImage() {  
         System.out.println("Displaying " + filename);  
         System.out.println("Displaying " + filename);  
47번째 줄: 47번째 줄:
     }
     }
   
   
     // 이미지 출쳑
     // 이미지 출력
     public void displayImage() {
     public void displayImage() {
         if (image == null) {
         if (image == null) {
71번째 줄: 71번째 줄:
     }
     }
}
}
</source>
</syntaxhighlight>


==같이 보기==
==같이 보기==
*[[Adapter 패턴]]
* [[프록시]]
*[[Decorator 패턴]]
* [[어댑터 패턴]]
*[[Composite 패턴]]
* [[컴포지트 패턴]]
*[[게으른 초기화]]
* [[게으른 초기화]]
*[[디자인 패턴]]
* [[데코레이터 패턴]]
*[[프록시]]


==참고==
==참고==
* {{위키백과|프록시 패턴}}
* {{위키백과|프록시 패턴}}
* {{영어위키백과|Proxy_pattern}}
* {{영어위키백과|Proxy pattern}}


[[분류: 디자인 패턴]]
[[분류: 디자인 패턴]]

2022년 6월 16일 (목) 15:51 기준 최신판

1 개요[ | ]

proxy pattern
프록시 패턴
  • 필요해지면 만드는 구조
  • 다른 무언가와 이어지는 인터페이스 역할을 하는 클래스

Proxy pattern diagram.svg

2 예제[ | ]

interface Image {
    public void displayImage();
}
 
// A 시스템에서
class RealImage implements Image {
 
    private String filename = null;
    // 생성자
    public RealImage(final String FILENAME) { 
        filename = FILENAME;
        loadImageFromDisk();
    }
 
    // 디스크로부터 이미지 로드
    private void loadImageFromDisk() {
        System.out.println("Loading   " + filename);
    }
 
    // 이미지 출력
    public void displayImage() { 
        System.out.println("Displaying " + filename); 
    }
}
 
// B 시스템에서
class ProxyImage implements Image {

    private RealImage image = null;
    private String filename = null;
    /**
     * Constructor
     * @param FILENAME
     */
    public ProxyImage(final String FILENAME) { 
        filename = FILENAME; 
    }
 
    // 이미지 출력
    public void displayImage() {
        if (image == null) {
           image = new RealImage(filename);
        } 
        image.displayImage();
    }
 
}
 
class ProxyExample {

   // 테스트 메소드
   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
    }
}

3 같이 보기[ | ]

4 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}