定義:用原型實例指定建立物件的種類,並且透過拷貝這些原型建立新的物件。
原型模式其實就是從一個物件再創建另一個可自訂的對象,而且不需要知道任何創建的細節。
原型模式主要考慮的深複製與淺複製,在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; }
原型模式(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; };
以上就是C++設計模式淺識原型模式的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!