原型模式

        原型(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

 

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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值