原型模式(
prototype
)-------
用原型例項指定建立物件的種類,並通過拷貝這些原型建立新的物件。
原型模式的結構圖
prototype原型類,宣告乙個轉殖自身的介面
concreteprototype具體原型類,實現乙個轉殖自身的操作
client 讓乙個原型類物件轉殖自身(執行的是深拷貝),從而建立出乙個新的物件,使轉殖物件不與原有的物件相關聯,也就是說,原物件和轉殖物件是兩個完全不同的物件。
關於簡歷原型的具體實現
在c++中沒有專門的介面,我們只有定義抽象類相當於介面的功能。
由於在resume中沒有concreteprototype,所以這裡就不定義具體類了,也可以說把prototype和concreteprototype類合併成乙個resume類。
#include#includeusing namespace std;
//簡歷--既是原型類也是具體類
class resume
//設定個人資訊
void setpersionalinfo(string _***, string _age)
//設定工作經歷
void setworkexperience(string _timearea, string _company)
//顯示
void display()
resume* clone() };
//客戶端呼叫**
int main()
執行的結果資訊如下:
以上執行結果沒有任何問題,是我們想要的結果。
如果客戶端這樣寫
int main()
執行結果如下:
解釋:只對指標進行簡單拷貝(淺拷貝),而不對指標所指向的物件進行拷貝,則兩個指標就是指向同乙個記憶體空間,共享同乙個記憶體物件。改變任何乙個物件,另乙個物件也會跟著發生變化。
我們的目的其實就是拷貝指標物件所指向的物件(深拷貝),而不是簡單的拷貝指向物件的指標。所以可以利用clone方法實現這一功能。
原型模式中的
clone
函式就像
c++中的
copy
建構函式或
copy
賦值運算子的功能。但定義乙個
clone
函式會更靈活的拷貝指標或引用。
copy
建構函式或
copy
賦值運算子往往是在乙個物件初始化另乙個物件或者把乙個物件賦值給另乙個物件(
不是物件指標
)隱式的
被呼叫。
Chapter09 原型模式
原型模式 prototype 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。原型模式其實就是從乙個物件再建立另外乙個可定製的物件,並且不需知道任何建立的細節。一般在初始化資訊不發生變化的情況下,轉殖是最好的辦法。這既隱藏了物件的細節,有對效能是大大的提高。它等於是不用重新初始化物件...
C 09 順序容器
include include include include include using std vector using std list using std deque using std string using std cin using std cout using std endl i...
C 原型模式
原型模式 prototype 用原型例項制定建立物件的種類,並通過拷貝這些原型建立新的物件。淺複製 using system using system.collections.generic using system.linq using system.text using system.threa...