亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++設計模式之原型模式

2020-05-23 14:21:28
字體:
供稿:網(wǎng)友
這篇文章主要介紹了C++設計模式之原型模式,本文講解了什么是原型模式、為什么要使用原型模式、代碼實例等內(nèi)容,需要的朋友可以參考下
 
 

C++設計模式之原型模式

什么是原型模式?

在GOF的《設計模式:可復用面向?qū)ο筌浖幕A》中是這樣說的:用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。這這個定義中,最重要的一個詞是“拷貝”,也就是口頭上的復制,而這個拷貝,也就是原型模式的精髓所在。

舉一個最簡單的例子來說明原型模式:記得上小學的時候,老師把需要做的課外習題寫到黑板上,而下面的我們都要把這些題抄寫到自己的本子上,回家做好,第二天交上來,也就是每道題,全班50個人,每個人都要抄寫一遍。按照現(xiàn)在的時間理論來說,就是浪費了50個人的時間。但是,那個時候條件限制,老師也是不得已而為之。現(xiàn)在好了,老師做一份電子版的習題,打印一份,然后拿著這份打印的原版,就可以復制出50份。

結(jié)合原型模式的概念進行分析,老師打印出來的那一份,就是“原型”,而復制出來的那50份,就是使用的“拷貝”。而原型模式就是這么簡單的一個道理,通過現(xiàn)有的東西,再復制出一個來。

為什么要使用原型模式?

原型模式和建造者模式、工廠方法模式一樣,都屬于創(chuàng)建型模式的一種。簡單的來說,我們使用原型模式,就是為了創(chuàng)建對象。但是,在以下場景下,使用原型模式是最好的選擇:

1.當我們的對象類型不是開始就能確定的,而這個類型是在運行期確定的話,那么我們通過這個類型的對象克隆出一個新的對象比較容易一些;

2.有的時候,我們需要一個對象在某個狀態(tài)下的副本,此時,我們使用原型模式是最好的選擇;例如:一個對象,經(jīng)過一段處理之后,其內(nèi)部的狀態(tài)發(fā)生了變化;這個時候,我們需要一個這個狀態(tài)的副本,如果直接new一個新的對象的話,但是它的狀態(tài)是不對的,此時,可以使用原型模式,將原來的對象拷貝一個出來,這個對象就和之前的對象是完全一致的了;

3.當我們處理一些比較簡單的對象時,并且對象之間的區(qū)別很小,可能就幾個屬性不同而已,那么就可以使用原型模式來完成,省去了創(chuàng)建對象時的麻煩了;

4.有的時候,創(chuàng)建對象時,構(gòu)造函數(shù)的參數(shù)很多,而自己又不完全的知道每個參數(shù)的意義,就可以使用原型模式來創(chuàng)建一個新的對象,不必去理會創(chuàng)建的過程,讓創(chuàng)建過程見鬼去吧。
所以,在上述的的情況下,在設計的時候,適當?shù)目紤]一下原型模式,減少對應的工作量,減少程序的復雜度,提高效率。

用UML類圖表示原型模式

C++設計模式之原型模式

由于克隆需要一個原型,而上面的類圖中Prototype就這個原型,Prototype定義了克隆自身的Clone接口,由派生類進行實現(xiàn),而實現(xiàn)原型模式的重點就在于這個Clone接口的實現(xiàn)。ConcretePrototype1類和ConcretePrototype2類繼承自Prototype類,并實現(xiàn)Clone接口,實現(xiàn)克隆自身的操作;同時,在ConcretePrototype1類和ConcretePrototype2類中需要重寫默認的復制構(gòu)造函數(shù),供Clone函數(shù)調(diào)用,Clone就是通過在內(nèi)部調(diào)用重寫的復制構(gòu)造函數(shù)實現(xiàn)的。在后續(xù)的編碼過程中,如果某個類需要實現(xiàn)Clone功能,就只需要繼承Prototype類,然后重寫自己的默認復制構(gòu)造函數(shù)就好了。好比在C#中就提供了ICloneable接口,當某個類需要實現(xiàn)原型模式時,只需要實現(xiàn)這個接口的道理是一樣的。

代碼實現(xiàn)

 

復制代碼代碼如下:

/*
** FileName     : PrototypePatternDemo
** Author       : Jelly Young
** Date         : 2013/11/25
** Description  : More information, please go to http://www.49028c.com
*/
 
#include <iostream>
using namespace std;
 
//接口
class Prototype
{
public :
    Prototype(){}
    virtual ~Prototype(){}
 
    virtual Prototype * Clone() = 0;
};
 
//實現(xiàn)
class ConcretePrototype : public Prototype
{
public :
    ConcretePrototype():m_counter(0){}
    virtual ~ConcretePrototype(){}
 
    //拷貝構(gòu)造函數(shù)
    ConcretePrototype( const ConcretePrototype & rhs)
    {
        m_counter = rhs .m_counter;
    }
 
    //復制自身
    virtual ConcretePrototype * Clone()
    {
        //調(diào)用拷貝構(gòu)造函數(shù)
        return new ConcretePrototype (*this );
    }
 
private :
    int m_counter;
};
 
int main(int argc , char **argv)
{
    //生成對像
    ConcretePrototype * conProA = new ConcretePrototype ();
 
    //復制自身
    ConcretePrototype * conProB = conProA->Clone();
 
    delete conProA;
    conProA= NULL ;
 
    delete conProB;
    conProB= NULL ;
 
    return 0;
}

 

上述代碼實現(xiàn)了一個最簡單的原型模式,但是已經(jīng)將原型模式的基本實現(xiàn)原理展現(xiàn)出來了。而有的時候,當調(diào)用Clone獲得了一個復制的對象以后,需要改變對象的狀態(tài),此時就可能需要在ConcretePrototype類中添加一個Initialize操作,專門用于初始化克隆對象。由于在Clone的內(nèi)部調(diào)用的是復制構(gòu)造函數(shù),而此處又涉及到深復制和淺復制的問題。所以,在實際操作的過程中,這些問題,都需要進行仔細的考慮。

與其它創(chuàng)建型模式的比較

工廠方法模式、抽象工廠模式、建造者模式和原型模式都是創(chuàng)建型模式。工廠方法模式適用于生產(chǎn)較復雜,一個工廠生產(chǎn)單一的一種產(chǎn)品的時候;抽象工廠模式適用于一個工廠生產(chǎn)多個相互依賴的產(chǎn)品;建造者模式著重于復雜對象的一步一步創(chuàng)建,組裝產(chǎn)品的過程,并在創(chuàng)建的過程中,可以控制每一個簡單對象的創(chuàng)建;原型模式則更強調(diào)的是從自身復制自己,創(chuàng)建要給和自己一模一樣的對象。

總結(jié)

原型模式作為創(chuàng)建型模式中最特殊的一個模式,具體的創(chuàng)建過程,是由對象本身提供,這樣我們在很多的場景下可以很方便的快速的構(gòu)建新的對象。但是,原型模式的最大缺點是繼承原型的子類都要實現(xiàn)Clone操作,這個是很困難的。例如,當所考慮的類已經(jīng)存在時就難以新增Clone操作。當內(nèi)部包括一些不支持拷貝或者有循環(huán)引用的對象時,實現(xiàn)克隆可能也會很困難。說以說,每一種設計模式都有它的優(yōu)點和缺點,在設計的時候,我們需要進行權(quán)衡各方面的因素,揚長避短。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产精品视频麻豆| 欧美精品videos另类日本| 欧美成人一二三区| av免费在线观看网站| 国产高潮国产高潮久久久91| 国产精品麻豆入口| 国产av不卡一区二区| 国产区欧美区日韩区| 99久久精品免费观看| 最新亚洲人成网站在线观看| 91精品国产色综合久久不卡粉嫩| 国产又大又黑又粗| 久久人体大胆视频| 亚洲区综合中文字幕日日| 不卡中文字幕| 2019男人天堂| 欧美区在线观看| 欧美成人手机在线视频| 中文字字幕在线中文| 亚洲美女屁股眼交| 欧美黄色成人| 国产麻豆精品theporn| 国产成人精品一区二区在线小狼| 欧美精品乱人伦久久久久久| 成人直播在线观看| 国产精品久久综合青草亚洲AV| 国产黄人亚洲片| 一区二区欧美久久| 天美星空大象mv在线观看视频| 狠狠色成人综合网图片区| 91精品综合久久久久久五月天| 久久久精品区| 最近中文字幕免费mv| 狠狠色丁香婷婷综合久久片| 亚洲午夜av久久乱码| 婷婷综合久久一区二区三区| 免费一级黄色大片| 九色视频九色自拍| 91.com视频| 午夜私人影院在线观看| 五月天亚洲综合| 99riav久久精品riav| 国产中文欧美精品| 国产欧美一区二区精品性| 欧美日本亚洲视频| 国产精品视区| 久久精品亚洲精品| 国产一区二区久久久| 成人免费在线观看视频| 先锋音影av资源中文网| 伊人成人在线视频| 日韩欧美大尺度| 亚洲国产日韩欧美在线99| 欧美成人a∨高清免费观看| 黄色国产网站在线播放| 看黄色免费网站| 一区二区三区精品视频在线观看| 少妇人妻丰满做爰xxx| 四虎影视精品成人| 91av在线免费| 一区二区三区精品| 91精品国产91久久久久麻豆 主演| 国产情侣自拍小视频| 99久久免费观看| 你懂的免费网站| 日韩在线视频国产| 北条麻妃在线观看视频| 96精品久久久久中文字幕| 日韩三级视频中文字幕| 狠狠人妻久久久久久| www.-级毛片线天内射视视| 妞干网在线观看视频| 久久精品观看| 亚洲熟女乱综合一区二区三区| 国产乱码精品一区二区三区四区| 伊人影院在线观看| 日韩黄色网络| 182在线观看视频| 国产精品久久综合青草亚洲AV| 国产一区二区视频在线观看免费| 青青草国产成人av片免费| 欧美在线免费一级片| 午夜精品一区二区三区在线| 91在线丨porny丨国产| 欧美日韩高清免费| 热re久久精品国产99热| 亚洲аv电影天堂网| 欧美中文字幕视频在线观看| 色中文字幕在线| 日本一二三区视频在线| 欧美日韩综合久久| 99热这里只有精品8| 国产精品88久久久久久妇女| 国产精品亚洲αv天堂无码| 精品不卡一区| 成熟妇人a片免费看网站| 亚洲美女尤物影院| 波多野结衣激情视频| av成人在线播放| 五月综合激情在线| 一区二区视频在线| 国产成人亚洲精品乱码在线观看| 国产午夜精品理论片a级大结局| av中文字幕在线免费观看| 日韩精品福利网| 一区二区三区免费在线观看| 国产欧美一区二区色老头| 国产欧美日韩在线播放| 欧美日韩免费做爰视频| 白白色在线观看| 国产精品羞羞答答在线观看| 国产成人欧美在线观看| 亚洲一区二区三区色| 日韩中文字幕组| 日本二区三区视频| 免费视频亚洲| 探花国产精品一区二区| 国产欧美一区二区| 嫩草影院懂你的影院| 久久精品卡一| 高清一区二区中文字幕| 91精品国产99久久久久久红楼| 一区二区三区在线播| 视频在线观看免费影院欧美meiju| 成人婷婷网色偷偷亚洲男人的天堂| 成人免费在线视频网| 日韩一区二区在线观看视频| 欧美孕妇性xxxⅹ精品hd| 做爰视频毛片视频| 亚洲国产日韩在线一区| 麻豆chinese极品少妇| 国产精品国产三级国产专播品爱网| 国产亚洲精品女人久久久久久| 国产精品自拍片| 国产污污视频在线观看| 第四色在线一区二区| 欧美性受xxxx黑人xxxx| 三上悠亚一区二区三区| 精品国产91久久久久久老师| 免费在线观看黄视频| 黄网站欧美内射| 1769国内精品视频在线播放| 欧美国产亚洲精品久久久8v| 肉色超薄丝袜脚交一区二区| 国产一级特黄视频| 青春娱乐分类视频精品2动漫| 亚洲aa在线观看| 欧美一级特黄aaaaaa大片在线观看| 久久精品一区二区三区不卡免费视频| 日韩精品一区二区三区中文在线| 亚洲网中文字幕| 成人永久免费视频| 米奇.777.com| 99久久这里只有精品| 中文精品久久久久人妻不卡| 性欧美精品男男| 欧美激情伊人电影| 天堂资源最新版在线视频观看免费网| 国产福利视频在线观看| 国产成人禁片免费观看视频| 国产偷国产偷精品高清尤物| 女人抽搐喷水高潮国产精品| 视频在线这里都是精品| 久久婷婷成人综合色| 樱花草www在线观看| 国产日韩欧美激情| 天天操综合520| 国产黄片一区二区三区| 久久中文字幕导航| 久久福利精品| 91九色偷拍| 黑人40厘米全进去| 国产成人亚洲综合a∨婷婷| 日本女优在线视频一区二区| 在线电影中文字幕| 亚洲综合av影视| 免费观看黄色大片| 欧美日韩在线三区| 国产免费播放一区二区| 亚洲无线观看| 国产成人禁片免费观看| 人人妻人人玩人人澡人人爽| 国产精品99久久久久久有的能看| 国产欧美日韩在线观看视频| 顶级黑人搡bbw搡bbbb搡| 欧美 亚洲 另类 激情 另类| 国产精久久一区二区三区| 欧美风情在线视频| 天天躁日日躁狠狠躁喷水| 欧美福利小视频| 91香蕉视频污版| av电影一区二区三区| 一区二区三区中文字幕在线观看| 中文字幕精品一区二区三区在线| 日韩久久中文字幕| 亚洲经典三级| 亚洲人成网站在线播放2019| 九九九伊在人线综合| 中文字幕一二区| 欧美一性一交| 成人在线视频免费| 久久全国免费视频| 国产精九九网站漫画| www.日本在线观看| 精品蜜桃一区二区三区| 麻豆疯狂做受xxxx高潮视频| 日本泡妞xxxx免费视频软件| 久久午夜剧场| 欧美日韩视频不卡| 人妻夜夜爽天天爽| 亚洲精品国产精品乱码不卡| 午夜日韩在线电影| 欧洲一区二区日韩在线视频观看免费| 中文字幕黄色av| 久久九九久精品国产免费直播| 久热99视频在线观看| 捆绑紧缚一区二区三区视频| 欧美成人精品在线视频| 欧美性巨大欧美| 欧美一区二区视频在线播放| 国产伊人精品在线| 无码人妻精品中文字幕| 最新av电影网站| 五十路六十路七十路熟婆| 亚洲色图色老头| 成人资源在线播放| 天天干天天草天天射| 亚洲一区二区在线免费观看| 一区二区乱子伦在线播放| 亚洲精品乱码久久久久久自慰| 欧美第一区第二区| 中文字幕欧美视频| 亚洲经典中文字幕| 99久久婷婷| 欧美日韩免费| 国产精品黄色影片导航在线观看| 日韩精品999| 99高清免费国产自产拍| 欧美三级特黄| 黄色片av在线| 成人在线观看黄色| 日韩福利一区二区三区| 97人人爽人人爽人人爽| 国产午夜精品在线观看| 91香蕉视频在线观看视频| 18+激情视频在线| 国产精品毛片久久久久久久| 久久久久99精品成人片三人毛片| 亚洲影院一区二区三区| 亚洲丝袜自拍清纯另类| 国产一级一区二区| 岛国大片在线观看| 蜜桃麻豆av在线| 亚洲视频精品一区| 无码国产精品96久久久久| 91综合网人人| 国产精品国模在线| 77777影视视频在线观看| 奇米777在线视频| 成色在线视频| 亚洲AV无码片久久精品| 天天操夜夜拍| 高潮毛片无遮挡| 亚洲欧美中日韩| 欧美无遮挡国产欧美另类| 久久久精品人妻一区二区三区| 18性欧美xxxⅹ性满足| 色婷婷综合久久久久中文一区二区| 亚欧精品在线视频| 日本不卡一区视频| 中文字幕91视频| 看黄色一级大片| 粉嫩的18在线观看极品精品| 欧美电影在线免费观看| 美女久久久久久久| 黄色三级在线观看| 九义人在线观看完整免费版电视剧| 2023亚洲男人天堂| 亚洲aaaaaa| 婷婷亚洲婷婷综合色香五月| 91国内在线播放| 欧洲猛交xxxx乱大交3| 久久久久久久久久影院| www网站在线观看| 国产精品色在线观看| 99r精品视频| 欧美人善zozσ性伦交| 精品久久久久中文慕人妻| 亚洲视频一区二区三区四区| 国产免费电影网站入口| 国产伦精品一区二区三区精品视频| 91福利精品第一导航| 欧美大奶子在线| 亚洲精品一区二区三区精华液| 国产一区久久久| 黑人精品xxx一区一二区| 国产免费a∨片在线观看不卡| 久久精品国产亚洲AV成人婷婷| 亚洲人精品一区| 韩国三级电影一区二区| 亚洲精品97久久中文字幕无码| 久久93精品国产91久久综合| 免费无码不卡视频在线观看| 国产在线国偷精品免费看| 欧美亚洲国产怡红院影院| 日日干天天草| 欧美日韩成人在线播放| 亚洲国产成人在线观看| 国产尤物在线视频| 手机亚洲手机国产手机日韩| 国产社区精品视频| 国产95在线|亚洲| 欧美国产精品劲爆| 国产精品一区二区婷婷| 在线免费观看视频| 日本成人中文字幕在线| 日本不卡二区| 亚洲s色大片在线观看| 国产精品青青草| 欧美爆操老女人| 草草在线视频| 日韩一区av在线| 亚洲成人网上| 男人操女人的视频在线观看欧美| 国产精品美女久久久久人| 国产成人av电影在线观看| 一区二区久久精品66国产精品| 宅男宅女性影片资源在线1|