- 생성할 객체의 종류를 명세하는 데에 원형이 되는 예시물을 이용하고, 그 원형을 복사함으로써 새로운 객체를 생성하는 패턴
- 인스턴스화할 클래스를 런타임에 지정할 때(예: 동적로딩)
- 제품 클래스 계통과 병력적으로 만드는 팩토리 클래스를 피하고 싶을 때
- 클래스의 인트턴스들이 서로 다른 상태 조합 중에 어느 하나일 때
- 런타임에 새로운 객체를 넣고 빼기가 다른 패턴에 비해 유연하다.
- 새로운 객체를 정의하는 것이 쉽다.
- 서브 클래스의 수를 줄일 수 있다.
- 클래스 내부구조가 순환참조를 하고 있는경우 clone함수를 구현하기 어려울 수 있다.
CProduct 클래스
class CProduct { public: virtual CProduct* Clone() = 0; };
CPhone, CCar 클래스
class CPhone : public CProduct { public: CPhone() {}; CPhone(const CPhone& rPhone) {}; virtual CProduct* Clone() { return new CPhone(*this); }; }; class CCar : public CProduct { public: CCar() {}; CCar(const CCar& rCar) {}; virtual CProduct* Clone() { return new CCar(*this); }; };
실행부분
void main() { CProduct* pPhone1 = new CPhone(); CProduct* pPhone2 = pPhone1->Clone(); delete pPhone1; delete pPhone2; CProduct* pCar1 = new CCar(); CProduct* pCar2 = pCar1->Clone(); delete pCar1; delete pCar2; }
UML - class 다이어그램
참고
- GoF의 디자인 패턴(개정판) 재사용성을 지닌 객체지향 소프트웨어의 핵심요소
- http://blog.naver.com/icarus_buk/220390625010
댓글 없음:
댓글 쓰기
참고: 블로그의 회원만 댓글을 작성할 수 있습니다.