一. 概述
定義:用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。
換句話說,就是不用重新初始化對象,而是動態地獲得對象運行時的狀態。
再說明白點,就是要一個拷貝過構造函數類似功能的接口。
結構圖如下:
代碼如下:
[cpp] //原型類,有一個clone接口
class Prototype
{
public:
virtual ~Prototype() {}
virtual Prototype* Clone() const = 0;
};
//具體原型類,實現一個clone自身的操作
class ConcretePrototype:public Prototype
{
public:
ConcretePrototype() {}
//拷貝構造函數
ConcretePrototype(const ConcretePrototype& cp)
{
cout<<"ConcretePrototype copy ..."<<endl;
}
//克隆接口
Prototype* Clone() const
{
return new ConcretePrototype(*this);
}
};
//測試代碼
int main(int argc,char* argv[])
{
//拷貝構造操作
ConcretePrototype p1;
ConcretePrototype p2 = p1;
//克隆操作 www.2cto.com
Prototype* p3 = new ConcretePrototype();
Prototype* p4 = p3->Clone();
return 0;
}
//原型類,有一個clone接口
class Prototype
{
public:
virtual ~Prototype() {}
virtual Prototype* Clone() const = 0;
};
//具體原型類,實現一個clone自身的操作
class ConcretePrototype:public Prototype
{
public:
ConcretePrototype() {}
//拷貝構造函數
ConcretePrototype(const ConcretePrototype& cp)
{
cout<<"ConcretePrototype copy ..."<<endl;
}
//克隆接口
Prototype* Clone() const
{
return new ConcretePrototype(*this);
}
};
//測試代碼
int main(int argc,char* argv[])
{
//拷貝構造操作
ConcretePrototype p1;
ConcretePrototype p2 = p1;
//克隆操作
Prototype* p3 = new ConcretePrototype();
Prototype* p4 = p3->Clone();
return 0;
}
二. 說明
1. Prototype 模式的關鍵就是(C++中)拷貝構造函數的實現方式,這也是C++實現技術層面上的事情。
2. 示例代碼中不涉及到深層拷貝(主要指有指針、復合對象的情況),主要在於體現Prototype模式的思想。
作者 lwbeyond