接下来介绍原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型对象创建新的对象。
其实,最常见的就是java中对象提供的 clone 方法,即你自己有了一个对象之后,就可以把它当作原型,不停的调用这个方法,从而得到新的同类型的对象!
直接展示代码:
1. prototype.h
- #ifndef _PROTOTYPE_H_
- #define _PROTOTYPE_H_
- class Prototype
- {
- public:
- virtual Prototype* clone() = 0;
- };
- #endif
2. prototypeA.h
- #ifndef _PROTOTYPE_A_H_
- #define _PROTOTYPE_A_H_
- #include "prototype.h"
- class PrototypeA : public Prototype
- {
- public:
- PrototypeA();
- Prototype* clone();
- void operation();
- };
- #endif
3. prototypeA.cpp
- #include <iostream>
- #include "prototype.h"
- #include "prototypeA.h"
- PrototypeA::PrototypeA()
- {
- std::cout << "coustruct PrototypeA" << std::endl;
- }
- Prototype* PrototypeA::clone()
- {
- std::cout << "PrototypeA - clone" << std::endl;
- return (new PrototypeA());
- }
- void PrototypeA::operation()
- {
- std::cout << "PrototypeA - operation" << std::endl;
- }
4. test.cpp
- #include <iostream>
- #include "prototype.h"
- #include "prototypeA.h"
- int main(int argc, char* argv[])
- {
- PrototypeA* pa = new PrototypeA();
- PrototypeA* paa = (PrototypeA*)pa->clone();
- pa->operation();
- paa->operation();
- delete pa;
- delete paa;
- }
执行结果:
- ./test
- coustruct PrototypeA
- PrototypeA - clone
- coustruct PrototypeA
- PrototypeA - operation
- PrototypeA - operation
这就是原型模式的基本代码,作为原型,自己必须实现 clone 方法;调用者拿大的是原型的全新复制版本
所以在最后有两次的 delete,值得主义,当然这也和实现有关!!!
阅读(1687) | 评论(0) | 转发(0) |