Prototype Pattern
미리 만들어진 개체(Object)를 복사하여 개체를 생성
유용한 경우
- 일반화 관계로 표현할 때 파생 클래스의 개수가 과도히 많아지고 각 클래스의 메서드에서 수행하는 알고리즘에 차이가 없으면서 생성 시에 개체의 속성 값만 다를 경우
장점
1. 다수의 객체 생성시 발생하는 비용을 효과적으로 줄일 수 있다.
2. 별도의 Factory나 Builder 등의 클래스 구현이 필요 없다.
3. 실행 시간(Run-time)에도 생성할 개체의 종류를 추가/삭제가 가능하다.
단점
- Clone 함수를 구현해야 한다.
미리 만들어진 개체(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; }
댓글 없음:
댓글 쓰기