[구조 패턴] Proxy pattern (프록시 패턴)
객체를 감싸서 그 객체에 대한 접근을 제어한다.
( 원문 위치 : http://www.tutorialspoint.com/design_pattern/proxy_pattern.htm )
프록시 패턴에서 클래스는 다른 클래스의 기능을 나타냅니다. 이러한 유형의 디자인 패턴은 구조 패턴에 속합니다.
프록시 패턴에서는 원래의 객체를 가진 객체를 생성하여 그 기능을 외부 세계와 인터페이스합니다.
Implementation
Image 인터페이스와 Image인터페이스를 구현하는 구체적 클래스를 생성할 것이다. ProxyImage는 RealImage 객체가 로딩하는 메모리 사용량을 감소시키기 위한 proxy클래스이다.
ProxyPatternDemo, 데모 클래스는 ProxyImage를 사용하여 필요에 따라 로드하고 표시 할 Image 객체를 가져옵니다.
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
'Development > Java' 카테고리의 다른 글
[구조 패턴] Bridge pattern (브리지 패턴) (0) | 2017.03.26 |
---|---|
[디자인 패턴] Compound pattern (컴파운드 패턴) (0) | 2017.03.26 |
[행위 패턴] State pattern (스테이트 패턴) (0) | 2017.03.26 |
[구조 패턴] Composite pattern (컴포지트 패턴) (0) | 2017.03.26 |
[행위 패턴] Iterator pattern (이터레이터 패턴) (0) | 2017.03.26 |