作用:
用原型執行個體指定建立對象的種類,並且通過拷貝這些原型建立新的對象。
UML結構圖:
抽象基類:
1)Prototype:虛擬基類,所有原型的基類,提供Clone介面函數
介面函數:
1)Prototype::Clone函數:純虛函數,根據不同的衍生類別來執行個體化建立對象.
解析:
Prototype 模式其實就是常說的"虛擬建構函式"一個實現,C++的實現機制中並沒有支援這個特性,但是通過不同衍生類別實現的Clone介面函數可以完成與"虛擬構造 函數"同樣的效果.舉一個例子來解釋這個模式的作用,假設有一家店鋪是配鑰匙的,他對外提供配製鑰匙的服務(提供Clone介面函數),你需要配什麼鑰匙 它不知道只是提供這種服務,具體需要配什麼鑰匙只有到了真正看到鑰匙的原型才能配好.也就是說,需要一個提供這個服務的對象,同時還需要一個原型 (Prototype),不然不知道該配什麼樣的鑰匙.
Prototype類似車輛的展示,當你喜歡某款車時,他們會給你一款相同款式的車,像軟體中的複製,而不是車展的那輛
案例代碼:
// class Prototype<br />class Prototype //抽象基類<br />{<br />public:<br />virtual Prototype* Clone() = 0 ;<br />} ;</p><p>// class ConcretePrototype1<br />class ConcretePrototype1 : public Prototype<br />{<br />public:<br />virtual Prototype* Clone()<br />{<br />ConcretePrototype1 *p = new ConcretePrototype1() ;<br />*p = *this ; //複製對象<br />return p ;<br />}<br />} ;</p><p>// class ConcretePrototype2<br />class ConcretePrototype2 : public Prototype<br />{<br />public:<br />virtual Prototype* Clone()<br />{<br />ConcretePrototype2 *p = new ConcretePrototype2() ;<br />*p = *this ; //複製對象<br />return p ;<br />}<br />} ;</p><p>//用戶端代碼:</p><p>void main()</p><p>{</p><p>ConcretePrototype1 *obj1 = new ConcretePrototype1() ;//原型對象1<br />ConcretePrototype2 *obj2 = new ConcretePrototype2() ;//原型對象2</p><p>Prototype *newobj1 = obj1->Clone() ;//複製對象1<br />Prototype *newobj2 = obj2->Clone() ;//複製對象2</p><p>//使用複製出的對象newobj1和newobj2<br />}<br />