Prototype - 原型模式

来源:互联网 发布:约翰克里斯多夫 知乎 编辑:程序博客网 时间:2024/06/06 01:07
定义
用原型实例来指定创建对象的种类,通过拷贝原型来创建新的对象。

案例
比如,在设计纸币的时候,最初的设计图就是一个原型,以后在造纸币的时候,就不用再设计了,根据之前设计好的纸币直接复印就可以了。现在有一个抽象类Money,它是所有纸币的一个基类,带有一个复制功能clone(), 人民币Renminbi和Dollar都是从它继承而来。



钱对与我们来说都一样,只要能复制就可以了,应为是通过复制,所以我们要在赋值构造的时候注意深拷贝和浅拷贝的问题,clone()而来的对象和原型对象是不同的对象,不能引用相同的数据。
  1. class Money {
  2. public:
  3. virtual Money* clone() const = 0;
  4. }
  5. class Renminbi : public Money {
  6. public:
  7. Renminbi(const Renminbi& other) {
  8. m_amount = other.m_amount;
  9. }
  10. Money* clone() const {
  11. return new Door(*this);
  12. }
  13. private:
  14. int m_amount;
  15. }
  1. Money* rmb = new Renminbi();
  2. Pocket pocket;
  3. pocket.push(rmb);
  4. pocket.push(rmb.clone());
  5. pocket.push(rmb.clone());
  6. pocket.push(rmb.clone());
  7. ...
这样就不用担心很快就花完了。

适用性
  • 当一个对象在运行是才能确定,经过一些列的操作。
  • 当要保存一个对象在运行过程中的不同时刻的信息。
  • 当要创建一系列相同的对象。
相关模式
一搬原型模式不单独使用,是和其他的模式一起组合使用。

0 0
原创粉丝点击