C++設計模式-Prototype

來源:互聯網
上載者:User

作用:
用原型執行個體指定建立對象的種類,並且通過拷貝這些原型建立新的對象。

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 />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.