정의: 프로토타입 인스턴스를 사용하여 생성할 객체의 유형을 지정하고, 이러한 프로토타입을 복사하여 새 객체를 생성합니다.
프로토타입 패턴은 실제로 생성에 대한 세부 사항을 알지 못한 채 객체에서 또 다른 사용자 정의 가능한 객체를 생성하는 것입니다.
프로토타입 모드는 주로 깊은 복사와 얕은 복사를 고려합니다. C++ 클래스 설계에서 복사 생성자는 얕은 복사이며 할당 연산자가 오버로드되면 깊은 복사입니다.
얕은 복사: 복사된 개체의 모든 변수는 원본 개체와 동일한 값을 포함하며 다른 개체에 대한 모든 참조는 여전히 원본 개체를 가리킵니다.
전체 복사: 참조 개체의 변수가 원래 참조 개체 대신 복사된 새 개체를 가리킵니다.
테스트 케이스:
[code]int main(){ //生成对象 ConcretePrototype * conProA = new ConcretePrototype(); //复制自身 ConcretePrototype *conProB = conProA->Clone(); //先clone后调用拷贝构造函数, Output: clone constructor delete conProA; conProA = NULL; delete conProB; conProB = NULL; return 0; }
프로토타입 구현
[code]//接口 class Prototype{ public: Prototype(){} virtual ~Prototype(){} virtual Prototype *Clone() = 0; }; //实现 class ConcretePrototype: public Prototype{ public: ConcretePrototype(): m_counter(0) {} virtual ~ConcretePrototype(){} //拷贝构造函数 ConcretePrototype(const ConcretePrototype &rhs){ std::cout << "constructor\n"; m_counter = rhs.m_counter; } //复制自身 virtual ConcretePrototype *Clone(){ //调用拷构造函数 std::cout << "clone\n"; return new ConcretePrototype(*this); } private: int m_counter; };
위는 C++ 디자인 패턴의 프로토타입 모드에 대한 내용이며, 더 많은 관련 내용은 PHP를 참고해주세요. 중국사이트(www.php.cn)!