gpt4 book ai didi

解析设计模式中的Prototype原型模式及在C++中的使用

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章解析设计模式中的Prototype原型模式及在C++中的使用由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

原型模式的意图是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.

适用性  当要实例化的类是在运行时刻指定时,例如,通过动态装载;或者 为了避免创建一个与产品类层次平行的工厂类层次时;或者 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些.

关于这个模式,突然想到了小时候看的《西游记》,齐天大圣孙悟空再发飙的时候可以通过自己头上的 3 根毛立马复制出来成千上万的孙悟空,对付小妖怪很管用(数量最重要).

原型模式也正是提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建。在 C++中拷贝构造函数(Copy Constructor)曾经是很对程序员的噩梦,浅层拷贝和深层拷贝的魔魇也是很多程序员在面试时候的快餐和系统崩溃时候的根源之一.

结构图:

解析设计模式中的Prototype原型模式及在C++中的使用

原型模式提供了一个通过已存在对象进行新对象创建的接口(Clone),Clone()实现和具体的实现语言相关,在 C++中我们将通过拷贝构造函数实现之.

例子 注意事项: (1)根据原型模式的UML图可以知道,实现要依赖于抽象要不要依赖与具体 (2)拷贝构造函数是核心,而且针对c++要进行的是深拷贝 (3)克隆函数的关键就是调用拷贝构造函数 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
using namespace std;
 
class Student
{
protected :
   int id;
   char name[10];
 
public :
   Student()
   {
   }
   ~Student()
   {
     cout<< "Desconstuct...." <<endl;
   }
 
   virtual Student *Clone()
   {}
   
   virtual void Show()
   { } 
};
 
   
class StudentTypeA: public Student
{
public :
   StudentTypeA( const char *name_input)
   {
     strcpy (name, name_input); 
     this ->id = 0;
     cout<< "Construction....." <<endl;
   }
 
   StudentTypeA( const StudentTypeA&other)
   {
     cout<< "Copy Construction..." <<endl;
     this ->id = other.id;
     this ->id ++;
     strcpy ( this ->name, other.name);
   }
 
   virtual StudentTypeA *Clone()
   {
     StudentTypeA *tmp = new StudentTypeA(* this );
     return tmp;
   }
   void Show()
   {
     cout<< "Student id == " << id << " name == " << name <<endl;
   }
   ~StudentTypeA()
   {
     cout<< "Deconstruction StudentTypeA" <<endl;
   }
};
 
int main()
{
   Student *student1 = new StudentTypeA( "fulima" );
   Student *student2 = student1->Clone();
   Student *student3 = student2->Clone();  
   
   student1->Show();
   student2->Show();
   student3->Show();  
   
   return 0;
}

  。

最后此篇关于解析设计模式中的Prototype原型模式及在C++中的使用的文章就讲到这里了,如果你想了解更多关于解析设计模式中的Prototype原型模式及在C++中的使用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com