概述
原型模式(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; WeeklyLog lihua(jack); lihua.setName("lihua"); cout<<"姓名:"<<lihua.getName()<<"\n题目:"<<lihua.getTitle()<<"\n内容:"<<lihua.getContent()<<endl; return 0; }
|