一、概述:
用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。其中有乙個詞很重要,那就是拷貝。可以說,拷貝是原型模式的精髓所在。舉個現實中的例子來介紹原型模式。找工作的時候,我們需要準備簡歷。假設沒有列印裝置,因此需手寫簡歷,這些簡歷的內容都是一樣的。這樣有個缺陷,如果要修改簡歷中的某項,那麼所有已寫好的簡歷都要修改,工作量很大。隨著科技的進步,出現了列印裝置。我們只需手寫乙份,然後利用列印裝置影印多份即可。如果要修改簡歷中的某項,那麼修改原始的版本就可以了,然後再影印。原始的那份手寫稿相當於是乙個原型,有了它,就可以通過影印(拷貝)創造出更多的新簡歷。這就是原型模式的基本思想。
二、uml圖:
三、優缺點:
優點:複製自身。客戶不知道需要物件的實際型別,只需知道它的抽象基類即可。(即有繼承樹的情況)
缺點:必須先有乙個物件例項(即原型)才能clone。
四、**實現:
[cpp]view plain
copy
print?
#include
//介面
class cprototype
virtual ~cprototype(){}
virtual cprototype* clone() = 0;
};
//實現
class cconcreteprototype : public cprototype
virtual ~cconcreteprototype(){}
//拷貝建構函式
cconcreteprototype(const cconcreteprototype& rhs)
//複製自身
virtual cprototype* clone()
private:
int m_counter;
};
int main(int argc, char **argv)
#include //介面
class cprototype
virtual ~cprototype(){}
virtual cprototype* clone() = 0;
};//實現
class cconcreteprototype : public cprototype
virtual ~cconcreteprototype(){}
//拷貝建構函式
cconcreteprototype(const cconcreteprototype& rhs)
//複製自身
virtual cprototype* clone()
private:
int m_counter;
};int main(int argc, char **argv)
五、綜述:
prototype模式同工廠模式,同樣對客戶隱藏了物件的建立工作.
但是,與通過對乙個類進行例項化來構造新物件不同的是,原型模式是通過拷貝乙個現有物件生成新物件的,
達到了"隔離類物件的使用者和具體型別(易變類)之間的耦合關係"的目的.
原型模式可以很方便的快速構建相同型別的物件.其構造過程有點類似細胞**.通過原型模式的轉殖介面轉殖物件,我們可以完全不關心待轉殖物件本身的型別,只需要呼叫介面就可以產生乙個新的同類物件.
C 設計模式實現 原型模式
一 概述 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。其中有乙個詞很重要,那就是拷貝。可以說,拷貝是原型模式的精髓所在。舉個現實中的例子來介紹原型模式。找工作的時候,我們需要準備簡歷。假設沒有列印裝置,因此需手寫簡歷,這些簡歷的內容都是一樣的。這樣有個缺陷,如果要修改簡歷中的某項...
設計模式 原型模式C 實現
用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件 class prototype protected prototype public virtual prototype clone const 0 vitual prototype 0 class prototypeclass pub...
設計模式C 實現六 原型模式
原型模式 prototype 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。原型模式其實就是從乙個物件再建立另乙個可定製的物件,而且不需知道建立的具體細節。ifndef prototype h define prototype h include includeusing name...