Item 29. Virtual Constructors and Prototype&Item 30. Factory Method

Item 29. Virtual Constructors and Prototype

Virtual Constructors?
C++没有Virtual Constructors这个概念。但有的情况下又需要这个功能,即在多态的时候能够创建出一个跟指针的动态类型相同的一个对象。既然是多态就要考虑虚函数,在虚函数中调用构造函数不就行了么?是的,这就是设计模式中的Prototype的解决方案:一个clone()的虚成员函数。
class Meal {
   public:
     virtual ~Meal();
     virtual void eat() = 0;
     virtual Meal *clone() const = 0;
     //...
};

class Spaghetti : public Meal {
   public:
     Spaghetti( const Spaghetti & ); // copy ctor
     void eat();
     Spaghetti *clone() const
         { return new Spaghetti( *this ); } // call copy ctor
     //...
};

const Meal *m = new Spaghetti;
Meal *myMeal = m->clone();


Item 30. Factory Method
哦,《设计模式》一书的更详细。

原文地址:https://www.cnblogs.com/aiwz/p/6333222.html