1. 程式人生 > >設計模式---原型模式

設計模式---原型模式

tdi lin his return proto del 構造函數 -h cst

故事背景:簡歷復制

概念:用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象

Prototype模式提供了一個通過已存在對象進行新對象創建的接口(Clone), Clone()實現和具體的語言相關,在C++中通過拷貝構造函數實現。

技術分享圖片

代碼如下:

#include <cstdio>

//接口
class CPrototype
{
public:
	CPrototype(){}
	virtual ~CPrototype(){}

	virtual CPrototype* Clone() = 0;
};

//實現
class CConcretePrototype : public CPrototype
{
public:
	CConcretePrototype():m_counter(0){}
	virtual ~CConcretePrototype(){}

	//拷貝構造函數
	CConcretePrototype(const CConcretePrototype& rhs)
	{
		m_counter = rhs.m_counter;
	}

	//復制自身
	virtual CPrototype* Clone()
	{
		//調用拷貝構造函數
		return new CConcretePrototype(*this);
	}

private:
	int m_counter;
};

int main(int argc, char **argv)
{
	//生成對像
	CPrototype* conProA = new CConcretePrototype();
	//復制自身
	CPrototype* conProB = conProA->Clone();

	delete conProA; conProA=NULL;
	delete conProB; conProB=NULL;

	return 0;
}

  

總結:

Prototype模式同工廠模式,同樣對客戶隱藏了對象的創建工作.但是,與通過對一個類進行實例化來構造新對象不同的是,原型模式是通過拷貝一個現有對象生成新對象的,達到了"隔離類對象的使用者和具體類型(易變類)之間的耦合關系"的目的.

原型模式可以很方便的快速構建相同類型的對象.其構造過程有點類似細胞分裂.通過原型模式的克隆接口克隆對象,我們可以完全不關心待克隆對象本身的類型,只需要調用接口就可以產生一個新的同類對象.

設計模式---原型模式