原型模式

        原型(PROTOTYPE)模式的目的是为了用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

 

为什么需要原型模式?

        我以QT中的QTableWidget 作为例子。如果我们需要对QTableWidget 中项(QTableWidgetItem)进行定制;就需要继承QTableWidgetItem并重写QTableWidgetItem 中的某些方法(QTableWidgetItem::setData),来达到应用程序的目的。

 

       但是这里就有一个问题,QTableWidget为了要创建一个特殊的QTableWidgetItem子对象,就必须要知道这个

子类的名字;对QTableWidget设计者来说,这是不可能的。当然解决的方法有很多,其中使用原型模式可以处理这种问题。在QT 中要求QTableWidgetItem 声明一个virtual 的clone方法。

      QTableWidgetItem* QTableWidgetItem::clone() const [virtual]

     这个方法的目的是返回一个该类的对象。QTableWidgetItem 的子类就可以重写这个方法,创建一个子类的对象,比如:

       QTableWidgetItem* Cell::clone()const

      {

               return new Cell(*this);

       }

     这样QTableWidget只要拥有了一个子类化对象,就可以按照需要创建无数的子类化对象。

 

 

限制:

 

   这个方法需要被创建的基类有一个虚的clone方法, 子类继承它的时候需要重写这个方法,返回一个子类化的对象。

 

参考文献:

   (1) 设计模式

   (2) 13.7 放松覆盖规则,C++语言的设计与演化

   (3) C++ GUI programming with Qt4

 

 【注意】现在习惯了将自己学习中获得感想,写出来;文字不流畅或表达不清楚,还请各位看官忍忍。

 

 

 

你可能感兴趣的:(设计模式,C++,c,prototype,qt)