페이지

2015년 1월 4일 일요일

Prototype Pattern (원형 패턴)

Prototype Pattern

 미리 만들어진 개체(Object)를 복사하여 개체를 생성

유용한 경우

- 일반화 관계로 표현할 때 파생 클래스의 개수가 과도히 많아지고 각 클래스의 메서드에서 수행하는 알고리즘에 차이가 없으면서 생성 시에 개체의 속성 값만 다를 경우

장점

 1. 다수의 객체 생성시 발생하는 비용을 효과적으로 줄일 수 있다.
 2. 별도의 Factory나 Builder 등의 클래스 구현이 필요 없다.
 3. 실행 시간(Run-time)에도 생성할 개체의 종류를 추가/삭제가 가능하다.

단점

- Clone 함수를 구현해야 한다.

//------------------------------------------------------------------
// Prototype 인터페이스 클래스
class Prototype
{
public:
  virtual Prototype* Clone() = 0;
};
 
//------------------------------------------------------------------
// ConcretePrototype1 클래스
class ConcretePrototype1 : public Prototype
{
public:
  ConcretePrototype1() {}
  ConcretePrototype1(const ConcretePrototype1& p) {}
public:
  Prototype* Clone() override final
  {
    return new ConcretePrototype1(*this);
  }
};
 
//------------------------------------------------------------------
// ConcretePrototype2 클래스
class ConcretePrototype2 : public Prototype
{
public:
  ConcretePrototype2() {}
  ConcretePrototype2(const ConcretePrototype2& p) {}
public:
  Prototype* Clone() override final
  {
    return new ConcretePrototype2(*this);
  }
};
 
 
//------------------------------------------------------------------
// Main
int _tmain(int argc, _TCHAR* argv[])
{
  Prototype* pOriginal = new ConcretePrototype1();
  Prototype* pClone = pOriginal->Clone();
   
  delete pClone;
  delete pOriginal;
 
  return 0;
}

댓글 없음:

댓글 쓰기