都是基於個人理解,本文是為了幫助記憶。
相同點:原型模式和拷貝構造函數都是要產生對象的復制品。
不同點:原型模式實現的是一個clone接口,注意是接口,也就是基於多態的clone虛函數。也就是說原型模式能夠通過基類指針來復制派生類對象。拷貝構造函數完不成這樣的任務。
原型模式的核心是克隆,構造函數只是克隆的一個辦法而已。
class base
{
public :
base();
base(base &obj);
virtual ~base();
virtual base *clone() { return new base(*this) ; };
};
class derived : public base
{
public :
derived();
derived( derived &);
virtual base *clone(){return new derived (*this); }
....
};
base *obj1 = new base ;
base *obj2 = new derived ;
base *obj3 = obj1 .clone();
base *obj4 = obj12.clone();