[디자인패턴] Proxy (구조패턴)

유존돌돌이·2022년 2월 25일
0

공부

목록 보기
9/22

연산을 할 때 객체 스스로가 직접 처리하지 않고 중간에 다른 '숨겨진' 객체를 통해 처리하는 방법.

아래 예는 유튜브의 구조를 예로 들었으며, 비교적 간단한 섬네일 보여주기는 자체 처리하나, 미리보기 같은 부하가 걸리는 것은 숨겨진 객체인 RealThumbnail이라는 객체를 사용하는 예이다.

Thumbnail 인터페이스 및 하위 객체


public interface Thumbnail {
	public void showTitle();
	public void showPreview();
}

class RealThumbnail implements Thumbnail{
	
	private String title;
	private String movieUrl;
	
	public RealThumbnail(String _title, String _movieUrl) {
		title = _title;
		movieUrl = _movieUrl;
	}
	public void showTitle() {
		System.out.println("Real 제목 : "+title);
	}
	public void showPreview() {
		System.out.println("http://"+movieUrl);
	}
	
}

class ProxyThumbnail implements Thumbnail {
	private String title;
	private String movieUrl;
	private RealThumbnail real;
	
	public ProxyThumbnail(String _title, String _movieUrl) {
		title = _title;
		movieUrl = _movieUrl;
	}
	public void showTitle() {
		System.out.println("Proxy 제목 : "+title);
	}
    // Proxy Pattern 사용!!!!!!
	// 부하가 걸리는 프리뷰는 Real것을 쓴다.
	public void showPreview() {
		 if(real==null) real = new RealThumbnail(title, movieUrl);
		 real.showPreview();
	}
	
}

호출부

public class MyProgram {
	
	public static void main(String[] args) {
		
		List<Thumbnail> list = new ArrayList<>();
		
		list.add(new ProxyThumbnail("나의 일상", "www.mylife.com"));
		list.add(new ProxyThumbnail("프록시란?", "whatisProxy.net"));
		list.add(new ProxyThumbnail("좋은 향수 추천", "perfume.co.kr"));

		for(Thumbnail tn : list) {
			tn.showTitle();
		}
		
		list.get(2).showPreview();
		list.get(2).showPreview();
		list.get(1).showPreview();
		list.get(0).showPreview();
		
	}
}

결과

Proxy 제목 : 나의 일상
Proxy 제목 : 프록시란?
Proxy 제목 : 좋은 향수 추천
http://perfume.co.kr
http://perfume.co.kr
http://whatisProxy.net
http://www.mylife.com

정리

난 간단한거 할게. 복잡한건 누가 할래?

0개의 댓글