原型模式:
用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。
原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。
我认为原型模式在C++中其实就相当于拷贝构造函数,clone执行的是浅拷贝,copy执行的是深拷贝。
原型模式的基本代码:
- #include <iostream>
- #include <string>
- using namespace std;
- class ProtoType
- {
- public:
- virtual char * GetID() = 0;
- char * mid;
- int n;
- };
- class ConcreteProtype1 : public ProtoType
- {
- public:
- ConcreteProtype1()
- {
- mid = NULL;
- }
- /*
- //ProtoType
- //浅拷贝(clone)
- ConcreteProtype1(const ConcreteProtype1 & cs)
- {
- mid = cs.mid;
- n = cs.n;
- }
- void SetID(int N, char * id)
- {
- mid = id;
- n = N;
- }
- */
- //深拷贝(copy)
- ConcreteProtype1(const ConcreteProtype1 & cs)
- {
- n = cs.n;
- mid = NULL;
- if(cs.mid != NULL)
- {
- mid = new char[n];
- strcpy(mid, cs.mid);
- }
- }
- void SetID(int N, char * id)
- {
- if(mid == NULL)
- {
- mid = new char[N];
- strcpy(mid, id);
- }
- n = N;
- }
- ~ConcreteProtype1()
- {
- if(mid != NULL)
- delete mid;
- }
- char * GetID()
- {
- return mid;
- }
- void Show()
- {
- if(mid != NULL)
- cout << GetID() << endl;
- }
- };
- int main(int argc, char* argv[])
- {
- ConcreteProtype1 CP1;
- ConcreteProtype1 CP2 = CP1;
- //浅拷贝(clone)
- /*
- char * Name = new char[10];
- strcpy(Name,"小菜");
- CP1.SetID(10, Name);
- strcpy(Name,"大鸟");
- CP2.SetID(10, Name);
- CP1.Show();
- CP2.Show();
- */
- //深拷贝(copy)
- CP1.SetID(10, "小菜");
- CP2.SetID(10, "大鸟");
- CP1.Show();
- CP2.Show();
- return 0;
- }