A Blackhole

Prototype Pattern

2018-05-29

Prototype Pattern

Prototype pattern creates objects by cloning an existing object.

생성자를 사용하여 instance 를 생성하는 경우에는 클래스 이름(타입)을 반드시 지정해야 한다.
그러나 아래의 경우에는 타입 없이 클래스를 생성하는 것을 고려해 볼 만 하다.

  1. 취급하는 객체의 종류가 너무 많고 각각을 별도 클래스로 만들어 관리해야 하는 경우
  2. instance가 복잡한 과정을 거쳐 생성되어 클래스로부터 만들기 어려운 경우
  3. instance를 특정 클래스에 의존하지 않고 framework 상에서 추상적으로 다루고 싶은 경우

이러한 경우 ‘모형’ 이 되는 instance를 등록해 두고, 이를 복사하여 인스턴스를 생성할 수 있다.
클래스 타입으로부터의 속박을 풀어주는 역할로도 쓰기 좋다.

  • Prototype : 모형 혹은 모범
  • clone : 복제

UML

prototype-pattern

구성 요소

  1. Prototype : clone 할 객체의 interface를 결정
  2. ConcretePrototype : 자신을 복제 생성하는 clone() 을 구현.
  3. Client : Prototype instance를 생성하는 책임을 가짐. ConcretePrototype 에 대해 모른다.

관련 패턴

  • FlyWeight : 하나의 인스턴스를 여러 곳에서 공유해서 이용
  • Memento : 스냅샷/undo 를 위해 현재 인스턴스의 상태를 저장
  • Composite : 복잡한 구조의 인스턴스가 동적으로 만들어질 때 prototype 활용 가능
  • Decorator : 복잡한 구조의 인스턴스가 동적으로 만들어질 때 prototype 활용 가능
  • Command : 명령을 복제하고 싶은 경우 prototype 패턴 사용