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
*/