Définition : utilisez des instances de prototypes pour spécifier les types d'objets à créer et créez de nouveaux objets en copiant ces prototypes.
Le patron du prototype consiste en fait à créer un autre objet personnalisable à partir d'un objet sans connaître aucun détail de la création.
Le mode prototype prend principalement en compte la copie profonde et la copie superficielle. Dans la conception de classe C, le constructeur de copie est une copie superficielle, et lorsque l'opérateur d'affectation est surchargé, il s'agit d'une copie profonde.
Copie superficielle : toutes les variables de l'objet copié contiennent les mêmes valeursde l'objet d'origine, et toutes les références à d'autres objets pointent toujours vers l'objet d'origine.
Copie complète : pointez la variable de l'objet de référence vers le nouvel objet copié au lieu de l'objet référencé d'origine.
Cas de test :
[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; }
Implémentation du prototype
[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; };
Ce qui précède est le contenu du mode prototype du modèle de conception C. Pour plus de contenu connexe, veuillez suivre. le site PHP chinois (m.sbmmt.com) !