定義: プロトタイプ インスタンスを使用して、作成するオブジェクトのタイプを指定し、これらのプロトタイプをコピーして新しいオブジェクトを作成します。
プロトタイプ パターンは、実際には、作成の詳細をまったく知らなくても、オブジェクトから別のカスタマイズ可能なオブジェクトを作成することです。
プロトタイプ モードでは、主にディープ コピーとシャロー コピーが考慮されます。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 中国語 Web サイト (www.php.cn) に注目してください。