Linux C++ 050-设计模式之原型模式
Linux C++ 050-设计模式之原型模式
本节关键字:Linux、C++、设计模式、原型模式
相关库函数:
概念
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
Prototype原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
使用场景
它主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。
代码示例
class Clone
{
public:
virtual Clone* clone() = 0;
virtual void show() = 0;
};
// 具体实现类
class Sheep : public Clone
{
public:
Sheep(int id, string name) :Clone(), // Clone()是委托构造函数,使用它所属类的构造函数来完该类中构造函数的构造
m_id(id), m_name(name)
{
cout << "Sheep() id address:" << &m_id << endl;
cout << "Sheep() name address:" << &m_name << endl;
}
~Sheep() { }
// 关键代码拷贝构造函数
Sheep(const Sheep& obj) {
this->m_id = obj.m_id;
this->m_name = obj.m_name;
cout << "Sheep(const Sheep& obj) id address:" << &m_id << endl;
cout << "Sheep(const Sheep& obj) name address:" << &m_name << endl;
}
// 关键代码克隆函数,返回return new Sheep(*this)
Clone* clone() {
return new Sheep(*this);
}
void show() {
cout << "id:" << m_id << endl;
cout << "name:" << m_name.data() << endl;
}
private:
int m_id;
string m_name;
};
int main_Clone()
{
Clone* s1 = new Sheep(1, "abs");
s1->show();
Clone* s2 = s1->clone();
s2->show();
delete s1;
s1 = NULL;
delete s2;
s2 = NULL;
return 0;
}
// 注意:克隆函数,返回的是基类的指针
/*
运行结果:
Sheep() id address:0x5f1518
Sheep() name address : 0x5f1520
id : 1
name : abs
Sheep(const Sheep & obj) id address : 0x5f19e8
Sheep(const Sheep & obj) name address : 0x5f19f0
id : 1
name : abs
*/
原文地址:https://blog.csdn.net/qq_45157350/article/details/135869828
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!