码迷,mamicode.com
首页 > 其他好文 > 详细

5 创建型模式-----原型模式

时间:2015-05-29 17:10:34      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

模式动机:在软件系统中,有些对象的创建过程非常复杂,但是又需要频繁创建,这时候需要提供一个原型对象,使用时只需要复制这个原型对象就可以了。

模式定义(Prototype Pattern)使用原型实例指定创建对象的类型,然后通过复制原型对象来创建新对象。

 

模式结构图:

技术分享

 

模式代码:

bt_原型模式.h

 1 #ifndef PP_H
 2 #define PP_H
 3 
 4 #include <iostream>
 5 
 6 using namespace std;
 7 
 8 /*
 9     原型类
10 */
11 class Prototype
12 {
13 public:
14     virtual ~Prototype(){ }
15     virtual Prototype* clone() = 0;
16 };
17 
18 /*
19     具体原型类
20 */
21 class ConcretePrototypeA : public Prototype
22 {
23 public:
24     ConcretePrototypeA(){ }
25     virtual Prototype* clone()
26     {
27         return new ConcretePrototypeA(*this);
28     }
29 
30 private:
31     ConcretePrototypeA(const ConcretePrototypeA& cp)
32     {
33         cout << "复制了一份当前原型A的实例" << endl;
34     }
35 };
36 class ConcretePrototypeB : public Prototype
37 {
38 public:
39     ConcretePrototypeB(){ }
40     virtual Prototype* clone()
41     {
42         return new ConcretePrototypeB(*this);
43     }
44 
45 private:
46     ConcretePrototypeB(const ConcretePrototypeB& cp)
47     {
48         cout << "复制了一份当前原型B的实例" << endl;
49     }
50 };
51 
52 #endif // PP_H

 

bt_原型模式.cpp

 1 #include "bt_原型模式.h"
 2 
 3 int main()
 4 {
 5     Prototype* pA = new ConcretePrototypeA;
 6     Prototype* pB = new ConcretePrototypeB;
 7     Prototype* copyOfA = pA->clone();
 8     Prototype* copyOfB = pB->clone();
 9 
10     cout << "pA == copyOfA --> " << (pA == copyOfA ? true : false) << endl;
11 
12     delete copyOfA;
13     delete copyOfB;
14     delete pA;
15     delete pB;
16 
17     return 0;
18 }
技术分享

 

模式优缺点:使用原型模式可以简化对象的创建过程,例如常用的Ctrl + C(复制)和Ctrl + V(粘贴)操作就是原型模式的应用。其复制得到的对象与原型对象是两个类型相同但内存地址不同的对象。

 

 

5 创建型模式-----原型模式

标签:

原文地址:http://www.cnblogs.com/benxintuzi/p/4538603.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!