原型模式

概述

原型模式(Prototype Pattern):是一种对象创建模式,用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象。

此次学习参考LoveLion的对象的克隆——原型模式(一)

由于他使用java语言,我使用C++,我感觉这个设计模式就是C++使用拷贝构造函数,当然你也可以写一个名为clone的函数。说到拷贝,在实现时要注意思考深拷贝和浅拷贝的问题。

关于这个问题可以查看我之前踩过的坑深拷贝和浅拷贝

实现

我也以周报为例:

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>
#include <string>

using namespace std;

class WeeklyLog
{
private:
string m_name;
string m_title;
string m_content;
public:
WeeklyLog(){
m_name = "";
m_title = "";
m_content = "";
}

WeeklyLog(WeeklyLog &log)
{
m_name = log.m_name;
m_title = log.m_title;
m_content = log.m_content;
}

void setName(string name)
{
m_name = name;
}

void setTitle(string title)
{
m_title = title;
}

void setContent(string content)
{
m_content = content;
}

string getName()
{
return m_name;
}

string getTitle()
{
return m_title;
}

string getContent()
{
return m_content;
}

};

int main()
{
WeeklyLog jack;
jack.setName("jack");
jack.setTitle("第一周周报");
jack.setContent("今天查看资料,学习!");
cout<<"姓名:"<<jack.getName()<<"\n题目:"<<jack.getTitle()<<"\n内容:"<<jack.getContent()<<endl;
//lihua今天摸鱼想抄jack的周报
WeeklyLog lihua(jack);
lihua.setName("lihua");
cout<<"姓名:"<<lihua.getName()<<"\n题目:"<<lihua.getTitle()<<"\n内容:"<<lihua.getContent()<<endl;
return 0;
}


原型模式
https://carl-5535.github.io/2022/05/04/设计模式/原型模式/
作者
Carl Chen
发布于
2022年5月4日
许可协议