C++設計模式實現--原型模式

一、概述:
    用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。其中有一個詞很重要,那就是拷貝。可以說,拷貝是原型模式的精髓所在。舉個現實中的例子來介紹原型模式。找工作的時候,我們需要準備簡歷。假設沒有打印設備,因此需手寫簡歷,這些簡歷的內容都是一樣的。這樣有個缺陷,如果要修改簡歷中的某項,那麼所有已寫好的簡歷都要修改,工作量很大。隨着科技的進步,出現了打印設備。我們只需手寫一份,然後利用打印設備複印多份即可。如果要修改簡歷中的某項,那麼修改原始的版本就可以了,然後再複印。原始的那份手寫稿相當於是一個原型,有了它,就可以通過複印(拷貝)創造出更多的新簡歷。這就是原型模式的基本思想。

二、UML圖:

   

三、優缺點:
    優點:複製自身。客戶不知道需要對象的實際類型,只需知道它的抽象基類即可。(即有繼承樹的情況)
    缺點:必須先有一個對象實例(即原型)才能clone。

四、代碼實現:

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

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


發佈了45 篇原創文章 · 獲贊 29 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章