프로토타입 패턴
Prototype(원형)
한번복사되어 가져온 객체 A 가 있다고 가정
A 에는 A.a[10], A.b[10] , A.c[10]
각 변수가 있고 각 변수는 어떤 데이터들을 또 담을 수 있는 클래스라고 할때
이 클래스로 다양한 표현을 할 수 있는데 각 다양한 표현을 하기 위해서 객체복사는
한번만 이루어지고 복사되어진 것들을 복사된 것으로 계속 활용 한다는 패턴
그냥 일반적인 개념이다
서버 & 클라이언트에서는 부하를 줄이기 위한 필수적 개념
자신 복사 구문은 이렇게 처리한다
Clone() : 자신 복사
class A{
int test;
public:
A* Clone(){ return new A(*this); }
};
이런 Prototype 패턴의 이점중 하나는
1. but Abstract 패턴을 쓰지 않고 그냥 자기 자신만 복사할때 Clone() 사용
2.
만약 파서에서 이미 오브젝트 아이디로 구분되어져 있는 오브젝트들을 램으로 복사하기 우해 로드 할때
각 오브젝트들에 대한 타입을 분기문으로 구분해서 복사 차리 하지 않고
한줄로 처리가 가능한데 이땐 Abstract 패턴의 구조로(virtual) 오브젝트가 만들어지고
각 자식 클래스에서 Clone() 을 부르면 분기문 없이 바로 복사 처리 가능
이때 복사되는 전체 노드를 Composite 패턴과 연결하면 효과적
이때 Composite 패턴은 기존에 등록된 노드(객체) 들의 결ㅇ합 집합으로 이 자체를 복사하고자 할때
또는 Composite 와 Composite 끼리 묶어 다시 Composite 을 구성할때 유용
전체 복사 composite 도 Clone() 을 수행할때 위 처럼 유사하게 수행한다
신경써야 할 부분
Clone() 복사시 자기 자신의 Deep Copy 가 필요한가 살펴봐야함
노드들이 포인터 일경우 포인터를 잃어버리지 않도록 주의
- 순환 구조일경우 구현이 까다롭다( because of 서로서로 복사 )
'디자인패턴과방법론 > 디자인패턴' 카테고리의 다른 글
instance Pool 패턴 (0) | 2012.11.02 |
---|---|
Singleton 패턴 , n 개 까지만 생성하고 싶다 (0) | 2012.11.02 |
Factory Method 패턴 (펙토리 패턴), 생성자에 인수를 넘기는 건 썩 좋지 못하다 (0) | 2012.11.02 |
Proxy 패턴 (0) | 2012.11.02 |
flyweight 패턴 (0) | 2012.11.02 |