Heim > Artikel > Backend-Entwicklung > Eine kurze Einführung in C++-Entwurfsmuster und Prototypmuster
Definition: Verwenden Sie Prototypinstanzen, um die zu erstellenden Objekttypen anzugeben, und erstellen Sie neue Objekte durch Kopieren dieser Prototypen.
Das Prototypmuster besteht eigentlich darin, aus einem Objekt ein weiteres anpassbares Objekt zu erstellen, ohne Einzelheiten der Erstellung zu kennen.
Der Prototypmodus berücksichtigt hauptsächlich tiefe Kopien und flache Kopien. Im C++-Klassendesign ist der Kopierkonstruktor eine flache Kopie, und wenn der Zuweisungsoperator überladen ist, ist er eine tiefe Kopie.
Flache Kopie: Alle Variablen des kopierten Objekts enthalten die gleichen Werte des Originalobjekts und alle Verweise auf andere Objekte verweisen weiterhin auf das Originalobjekt.
Tiefe Kopie: Richten Sie die Variable des Referenzobjekts auf das kopierte neue Objekt und nicht auf das ursprünglich referenzierte Objekt.
Testfall:
[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; }
Prototyp-Implementierung
[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; };
Das Obige ist der Inhalt des Prototypmodus des C++-Entwurfsmusters. Weitere Informationen finden Sie hier die chinesische PHP-Website (www.php.cn)!