設計模式-原型模式

1. 首先分析原型模式的由來

    一般來說,創建一個對象可以由以下方法:

            知道對象的具體類型,直接用new生成。

            不知道型號,知道相應的需求,可以使用工廠方法模式。

           根據一個已有的對象來複製爲一個新的對象,可以使用原型模式。

 

2. 原型模式可以簡單理解爲拷貝原型對象得到新的對象。想象一個配鑰匙的小店,給店主一個原有的鑰匙,複製一份新的。在原型模式中,得到的新的對象可以進行修改再返回給用戶。

 

3. UML圖

 

 

4. 示例實現代碼

#include <iostream>
using namespace std;

//原型類,聲明一個Clone的接口
class Protetype
{
public:
	Protetype(){}
	virtual ~Protetype(){}
	virtual Protetype* Clone()=0;	//聲明接口
};

//具體的原型類-1
class ConcreteProtetype1:public Protetype
{
public:
	ConcreteProtetype1(){cout<<"Constructed a protetype1!"<<endl;}
	virtual ~ConcreteProtetype1(){cout<<"Deleted a protetype1!"<<endl;}
	Protetype* Clone()
	{
		return new ConcreteProtetype1(*this);	//拷貝一份對象返回,調用了拷貝構造函數
	}
};

//具體的原型類-2
class ConcreteProtetype2:public Protetype
{
public:
	ConcreteProtetype2(){cout<<"Constructed a protetype2!"<<endl;}
	virtual ~ConcreteProtetype2(){cout<<"Deleted a protetype2!"<<endl;}
	Protetype* Clone()
	{
		return new ConcreteProtetype2(*this);	//拷貝一份對象返回
	}
};

int _tmain(int argc, _TCHAR* argv[])
{
	Protetype* p1=new ConcreteProtetype1;
	Protetype* p2=p1->Clone();

	delete p1;
	delete p2;

	Protetype* p3=new ConcreteProtetype1;
	ConcreteProtetype2* p4=(ConcreteProtetype2*)p3->Clone();

	delete p3;
	delete p4;

	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章