본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


디자인 패턴

디자인패턴 - 프로토타입 패턴

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2019. 5. 2.

 

 

프로토타입 패턴은 한번 생성 된 객체가 자주 바뀌지 않고 공유되며 사용 될 때 주로 쓰인다.

Cloneable 인터페이스를 상속 받은 추상 클래스를 1개 만들고 해당 추상클래스를 상속받는 클래스를 만든다.

그리고 상속받은 클래스를 관리하는 클래스를 1개 더 만들어 사용한다.

즉, A라는 Cloneable 인터페이스를 상속받은 클래스를 B, C 클래스가 구현하고 그러한 B,C를 D라는 클래스가 객체를 관리해서 사용하는 패턴이다.

//상속받아 사용 할 클래스(A)
abstract class Type implements Cloneable { 
	public String text; //문자
	public int number;  //숫자
	abstract void printer();
	@Override
	public Object clone() throws CloneNotSupportedException {
		Object clone = super.clone();  //만약 ARRAY 같은 객체가 있는 경우에는 해당 ARRAY 객체도 Clone을 활용해서 return해야 된다.
	    return clone;  
	}
}

class Type1 extends Type {//상속받아 사용하는 클래스B
	public Type1(){
		this.text = "type1";
	}
	@Override
	void printer() {
		System.out.println("Im type 1");
	}
}

class Type2 extends Type {//상속받아 사용하는 클래스C
	public Type2(){
		this.text = "type2";
	}
	@Override
	void printer() {
		System.out.println("Im type 2");
	}
}
class TypeBody{ //B와C를 관리하는 클래스D
	
	private static final Hashtable<Integer, Type> map  = new Hashtable<Integer, Type>();
	
	public static Type getType(int number) throws CloneNotSupportedException{
		return (Type) map.get(number).clone();  //줄때 clone된 객체를 리턴
	}
	
	public final static void loadType(){
		Type1 type = new Type1();
		type.number = 1;
		map.put(1, type);
		
		Type2 type2 = new Type2();
		type2.number = 1;
		map.put(2, type2);
	}
}
import java.util.Hashtable;

public class PrototypeExample {

	static{
		TypeBody.loadType();  //대상 생성하기
	}

	public static void main(String args[]) throws Exception {
		
		Type first = TypeBody.getType(1);	//사용하는 모습	
		Type second = TypeBody.getType(2);
		first.printer();
		second.printer();
	}
}

데이터베이스나 Properties같은 곳에서 대상을 한번 불러온 이후에 바뀔일이 없다면 프로토타입 패턴같이 객체를 사용하는 것도 좋은 방법이다. 물론 if를 활용해서 비슷하게 하는 방법도 있지만..

반응형

'디자인 패턴' 카테고리의 다른 글

디자인패턴 - 빌더 패턴  (0) 2019.05.02
디자인패턴 - 싱글톤 패턴  (0) 2019.05.02
디자인패턴 - 팩토리 패턴  (0) 2019.05.02
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글