Design Pattern: Prototype

825阅读 0评论2009-02-20 finalguy
分类:

Realize virtual constructor through clone() function.

Textblock *a=previousObject.clone();

class NLComponent { public: 
  // declaration of virtual copy constructor 
  virtual NLComponent * clone() const = 0; 
  ... 

}; 

class TextBlock: public NLComponent { 
public: 
  virtual TextBlock * clone() const // virtual copy 
  { return new TextBlock(*this); } // constructor 

  ... 

}; 

class Graphic: public NLComponent { 
public: 
  virtual Graphic * clone() const // virtual copy 
  { return new Graphic(*this); } // constructor 

  ... 

}; 

Notice that the above implementation takes advantage of a relaxation in the rules for virtual function return types that was adopted relatively recently. No longer must a derived class's redefinition of a base class's virtual function declare the same return type. Instead, if the function's return type is a pointer (or a reference) to a base class, the derived class's function may return a pointer (or reference) to a class derived from that base class. This opens no holes in C++'s type system, and it makes it possible to accurately declare functions such as virtual copy constructors. That's why TextBlock's clone can return a TextBlock* and Graphic's clone can return a Graphic*, even though the return type of NLComponent's clone is NLComponent*. 

上一篇:Design Pattern: Singleton
下一篇:Design Pattern: Proxy