1. 程式人生 > >我與C++設計模式(四)——prototype pattern

我與C++設計模式(四)——prototype pattern

我故意將標題寫成英文的,很不好意思地講在之前我不認識這個單詞,原型模式。

如果你跟我一樣,是C++出身,這一模式我表示相當好理解,僅次於Singleton,用一段話來解釋就是:拷貝構造~完~

不要搞笑,原型模式就是對給出的類物件進行一次深拷貝,深拷貝和淺拷貝這裡不詳說,前者是面向記憶體的,後者是面向值的。原型模式的UML圖,(你也可以點這兒):


我想C++人都近乎瘋狂的熱衷於多型了,其實在自己構思的時候我是沒有想到這個模式還要多型一下,後來想了想,自己太low了,多型是C++的命脈所在,為什麼能夠在高層面去控制物件而不用呢,不要總是擔心你的子類被砍掉,要知道,只要是有虛擬函式,用的是父類指標,子類的那點兒東西丟不了。回到本模式,程式碼:

#ifndef _PROTOTYPE_H__
#define _PROTOTYPE_H__

class Prototype{

public:
	Prototype();
	virtual ~Prototype();<span style="white-space:pre">	</span>//virtual destructor

	virtual Prototype* clone() = 0;
};


class ConcretePrototype:public Prototype{

public:
	ConcretePrototype();
	~ConcretePrototype();

	Prototype* clone();

private:
	ConcretePrototype(const ConcretePrototype&);
};

#endif
 

#include "Prototype.h"
#include <iostream>
using namespace std;

Prototype::Prototype(){}

Prototype::~Prototype(){}


ConcretePrototype::ConcretePrototype(){}

ConcretePrototype::~ConcretePrototype(){}

ConcretePrototype::ConcretePrototype(const ConcretePrototype& c)
{
	cout<<"ConcretePrototype copy construct!"<<endl;
}

Prototype* ConcretePrototype::clone()
{
	return new ConcretePrototype(*this); //return abstract class pointer
}
 

#include "Prototype.h"

int main()
{
	Prototype* p = new ConcretePrototype();

	Prototype* a = p->clone();
	return 0;
}