www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 程序喵大人
[導(dǎo)讀]【成功的花兒,人們只驚羨她現(xiàn)時(shí)的明艷!當(dāng)初她的芽?jī)航噶藠^斗的淚泉,撒遍了犧牲的血雨。】 ——冰心 原型模式也屬于創(chuàng)建型模式,用于創(chuàng)建重復(fù)的對(duì)象,它提供了一種創(chuàng)建相同對(duì)象的最佳方式。當(dāng)直接創(chuàng)建對(duì)象需要較大的代價(jià)時(shí),可以使用原型模式。例如對(duì)象需


【成功的花兒,人們只驚羨她現(xiàn)時(shí)的明艷!當(dāng)初她的芽?jī)航噶藠^斗的淚泉,撒遍了犧牲的血雨。】

——冰心

原型模式也屬于創(chuàng)建型模式,用于創(chuàng)建重復(fù)的對(duì)象,它提供了一種創(chuàng)建相同對(duì)象的最佳方式。當(dāng)直接創(chuàng)建對(duì)象需要較大的代價(jià)時(shí),可以使用原型模式。例如對(duì)象需要讀取文件或者向服務(wù)器發(fā)起請(qǐng)求獲取某些必要數(shù)據(jù)才可以被創(chuàng)建,每次都直接創(chuàng)建顯然有很大代價(jià),所以可以考慮緩存數(shù)據(jù),提供一個(gè)克隆接口,直接用緩存的數(shù)據(jù)創(chuàng)建對(duì)象。
原型模式的實(shí)現(xiàn)較為簡(jiǎn)單,基類(lèi)提供Clone虛函數(shù),子類(lèi)只需實(shí)現(xiàn)這個(gè)Clone函數(shù)即可。
    
#include <iostream>
struct Animal { virtual ~Animal() {}
virtual Animal* Clone() = 0; virtual void ShowName() = 0; };
struct Tiger : public Animal { Animal* Clone() override { return new Tiger(); }
void ShowName() override { std::cout << "Tiger" << std::endl; } };
int main() { Animal* animal = new Tiger(); animal->ShowName(); Animal* animal_copy = animal->Clone(); // 想要一個(gè)和animal完全相同的實(shí)例 animal_copy->ShowName(); return 0; }
原型模式還有個(gè)重要意義:當(dāng)一個(gè)基類(lèi)指針指向某個(gè)子類(lèi)對(duì)象時(shí),這時(shí)如果想要拷貝這個(gè)子類(lèi)對(duì)象是比較困難的,因?yàn)橹煌ㄟ^(guò)一個(gè)基類(lèi)指針我們不知道該指針究竟指向了什么類(lèi)型的對(duì)象,即無(wú)法調(diào)用相應(yīng)的構(gòu)造函數(shù),通過(guò)typeid加switch貌似代價(jià)太大,所以可以使用此原型模式。

參考資料

https://www.runoob.com/design-pattern/prototype-pattern.html http
https://www.zhihu.com/question/52610176


往期推薦





免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉