Chinaunix首页 | 论坛 | 博客
  • 博客访问: 133610
  • 博文数量: 27
  • 博客积分: 531
  • 博客等级: 一等列兵
  • 技术积分: 332
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-25 18:31
文章分类

全部博文(27)

文章存档

2015年(4)

2014年(3)

2013年(6)

2012年(14)

我的朋友

分类: Delphi

2012-05-27 13:32:18

        接下来介绍原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型对象创建新的对象。
        其实,最常见的就是java中对象提供的 clone 方法,即你自己有了一个对象之后,就可以把它当作原型,不停的调用这个方法,从而得到新的同类型的对象!

直接展示代码:
1. prototype.h

点击(此处)折叠或打开

  1. #ifndef _PROTOTYPE_H_
  2. #define _PROTOTYPE_H_

  3. class Prototype
  4. {
  5. public:
  6.     virtual Prototype* clone() = 0;
  7. };

  8. #endif
2. prototypeA.h

点击(此处)折叠或打开

  1. #ifndef _PROTOTYPE_A_H_
  2. #define _PROTOTYPE_A_H_

  3. #include "prototype.h"

  4. class PrototypeA : public Prototype
  5. {
  6. public:
  7.     PrototypeA();
  8.     Prototype* clone();
  9.     void operation();
  10. };

  11. #endif
3. prototypeA.cpp

点击(此处)折叠或打开

  1. #include <iostream>
  2. #include "prototype.h"
  3. #include "prototypeA.h"

  4. PrototypeA::PrototypeA()
  5. {
  6.     std::cout << "coustruct PrototypeA" << std::endl;
  7. }

  8. Prototype* PrototypeA::clone()
  9. {
  10.     std::cout << "PrototypeA - clone" << std::endl;
  11.     return (new PrototypeA());
  12. }

  13. void PrototypeA::operation()
  14. {
  15.     std::cout << "PrototypeA - operation" << std::endl;
  16. }
4. test.cpp

点击(此处)折叠或打开

  1. #include <iostream>
  2. #include "prototype.h"
  3. #include "prototypeA.h"

  4. int main(int argc, char* argv[])
  5. {
  6.     PrototypeA* pa = new PrototypeA();
  7.     PrototypeA* paa = (PrototypeA*)pa->clone();

  8.     pa->operation();
  9.     paa->operation();

  10.     delete pa;
  11.     delete paa;
  12. }
执行结果:

点击(此处)折叠或打开

  1. ./test
  2. coustruct PrototypeA
  3. PrototypeA - clone
  4. coustruct PrototypeA
  5. PrototypeA - operation
  6. PrototypeA - operation
       这就是原型模式的基本代码,作为原型,自己必须实现 clone 方法;调用者拿大的是原型的全新复制版本
所以在最后有两次的 delete,值得主义,当然这也和实现有关!!!


阅读(1497) | 评论(0) | 转发(0) |
0

上一篇:策略模式

下一篇:建造者模式

给主人留下些什么吧!~~