日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 程序喵大人
[導讀]【成功的花兒,人們只驚羨她現(xiàn)時的明艷!當初她的芽兒浸透了奮斗的淚泉,撒遍了犧牲的血雨。】 ——冰心 原型模式也屬于創(chuàng)建型模式,用于創(chuàng)建重復的對象,它提供了一種創(chuàng)建相同對象的最佳方式。當直接創(chuàng)建對象需要較大的代價時,可以使用原型模式。例如對象需


【成功的花兒,人們只驚羨她現(xiàn)時的明艷!當初她的芽兒浸透了奮斗的淚泉,撒遍了犧牲的血雨。】

——冰心

原型模式也屬于創(chuàng)建型模式,用于創(chuàng)建重復的對象,它提供了一種創(chuàng)建相同對象的最佳方式。當直接創(chuàng)建對象需要較大的代價時,可以使用原型模式。例如對象需要讀取文件或者向服務器發(fā)起請求獲取某些必要數(shù)據(jù)才可以被創(chuàng)建,每次都直接創(chuàng)建顯然有很大代價,所以可以考慮緩存數(shù)據(jù),提供一個克隆接口,直接用緩存的數(shù)據(jù)創(chuàng)建對象。
原型模式的實現(xiàn)較為簡單,基類提供Clone虛函數(shù),子類只需實現(xiàn)這個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(); // 想要一個和animal完全相同的實例 animal_copy->ShowName(); return 0; }
原型模式還有個重要意義:當一個基類指針指向某個子類對象時,這時如果想要拷貝這個子類對象是比較困難的,因為只通過一個基類指針我們不知道該指針究竟指向了什么類型的對象,即無法調用相應的構造函數(shù),通過typeid加switch貌似代價太大,所以可以使用此原型模式。

參考資料

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


往期推薦





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

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