[23種設(shè)計(jì)模式匯總]設(shè)計(jì)模式_原型模式

[23種設(shè)計(jì)模式匯總]設(shè)計(jì)模式_原型模式

ID:1499315

大小:141.00 KB

頁(yè)數(shù):12頁(yè)

時(shí)間:2017-11-12

[23種設(shè)計(jì)模式匯總]設(shè)計(jì)模式_原型模式_第1頁(yè)
[23種設(shè)計(jì)模式匯總]設(shè)計(jì)模式_原型模式_第2頁(yè)
[23種設(shè)計(jì)模式匯總]設(shè)計(jì)模式_原型模式_第3頁(yè)
[23種設(shè)計(jì)模式匯總]設(shè)計(jì)模式_原型模式_第4頁(yè)
[23種設(shè)計(jì)模式匯總]設(shè)計(jì)模式_原型模式_第5頁(yè)
資源描述:

《[23種設(shè)計(jì)模式匯總]設(shè)計(jì)模式_原型模式》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)

1、設(shè)計(jì)模式?原型模式?概述在軟件系統(tǒng)中,有時(shí)候面臨的產(chǎn)品類是動(dòng)態(tài)變化的,而且這個(gè)產(chǎn)品類具有一定的等級(jí)結(jié)構(gòu)。這時(shí)如果用工廠模式,則與產(chǎn)品類等級(jí)結(jié)構(gòu)平行的工廠方法類也要隨著這種變化而變化,顯然不大合適。那么如何封裝這種動(dòng)態(tài)的變化?從而使依賴于這些易變對(duì)象的客戶程序不隨著產(chǎn)品類變化?意圖用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。結(jié)構(gòu)圖Prototype模式結(jié)構(gòu)圖生活中的例子Prototype模式使用原型實(shí)例指定創(chuàng)建對(duì)象的種類。新產(chǎn)品的原型通常是先于全部產(chǎn)品建立的,這樣的原型是被動(dòng)的,并不參與復(fù)制它

2、自己。一個(gè)細(xì)胞的有絲分裂,產(chǎn)生兩個(gè)同樣的細(xì)胞,是一個(gè)扮演主動(dòng)角色復(fù)制自己原型的例子,這演示了原型模式。一個(gè)細(xì)胞分裂,產(chǎn)生兩個(gè)同樣基因型的細(xì)胞。換句話說(shuō),細(xì)胞克隆了自己。使用細(xì)胞分裂例子的Prototype模式對(duì)象圖原型模式解說(shuō)我們考慮這樣一個(gè)場(chǎng)景,假定我們要開(kāi)發(fā)一個(gè)調(diào)色板,用戶單擊調(diào)色板上任一個(gè)方塊,將會(huì)返回一個(gè)對(duì)應(yīng)的顏色的實(shí)例,下面我們看看如何通過(guò)原型模式來(lái)達(dá)到系統(tǒng)動(dòng)態(tài)加載具體產(chǎn)品的目的。很自然,我們利用OO的思想,把每一種顏色作為一個(gè)對(duì)象,并為他們抽象出一個(gè)公用的父類,如下圖:實(shí)現(xiàn)代碼:publicabst

3、ractclassColor{publicabstractvoidDisplay();}publicclassRedColor:Color{publicoverridevoidDisplay(){Console.WriteLine("Red'sRGBValuesare:255,0,0");}}publicclassGreenColor:Color{publicoverridevoidDisplay(){Console.WriteLine("Green'sRGBValuesare:0,255,0");}}客戶程序

4、需要某一種顏色的時(shí)候,只需要?jiǎng)?chuàng)建對(duì)應(yīng)的具體類的實(shí)例就可以了。但是這樣我們并沒(méi)有達(dá)到封裝變化點(diǎn)的目的,也許你會(huì)說(shuō),可以使用工廠方法模式,為每一個(gè)具體子類定義一個(gè)與其等級(jí)平行的工廠類,那么好,看一下實(shí)現(xiàn):實(shí)現(xiàn)代碼:publicabstractclassColorFactory{publicabstractColorCreate();}publicclassRedFactory:ColorFactory{publicoverrideColorCreate(){returnnewRedColor();}}publicc

5、lassGreenFactory:ColorFactory{publicoverrideColorCreate(){returnnewGreenColor();}}實(shí)現(xiàn)了這一步之后,可以看到,客戶程序只要調(diào)用工廠方法就可以了。似乎我們用工廠方法模式來(lái)解決是沒(méi)有問(wèn)題的。但是,我們考慮的僅僅是封裝了new變化,而沒(méi)有考慮顏色的數(shù)量是不斷變化的,甚至可能是在程序運(yùn)行的過(guò)程中動(dòng)態(tài)增加和減少的,那么用這種方法實(shí)現(xiàn),隨著顏色數(shù)量的不斷增加,子類的數(shù)量會(huì)迅速膨大,導(dǎo)致子類過(guò)多,顯然用工廠方法模式有些不大合適。進(jìn)一步思考,這些

6、Color子類僅僅在初始化的顏色對(duì)象類別上有所不同。添加一個(gè)ColorTool這樣的類,來(lái)參數(shù)化的它的實(shí)例,而這些實(shí)例是由Color支持和創(chuàng)建的。我們讓ColorTool通過(guò)克隆或者拷貝一個(gè)Color子類的實(shí)例來(lái)創(chuàng)建新的Color,這個(gè)實(shí)例就是一個(gè)原型。如下圖所示:實(shí)現(xiàn)代碼:abstractclassColorPrototype{publicabstractColorPrototypeClone();}classConcteteColorPrototype:ColorPrototype{privateint_r

7、ed,_green,_blue;publicConcteteColorPrototype(intred,intgreen,intblue){this._red=red;this._green=green;this._blue=blue;}publicoverrideColorPrototypeClone(){//實(shí)現(xiàn)淺拷貝return(ColorPrototype)this.MemberwiseClone();}publicvoidDisplay(string_colorname){Console.WriteL

8、ine("{0}'sRGBValuesare:{1},{2},{3}",_colorname,_red,_green,_blue);}}classColorManager{Hashtablecolors=newHashtable();publicColorPrototypethis[stringname]{get{return(ColorPrototype)colors[name];}

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。