我與C++設計模式(四)——prototype pattern
阿新 • • 發佈:2019-02-13
我故意將標題寫成英文的,很不好意思地講在之前我不認識這個單詞,原型模式。
如果你跟我一樣,是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; }