[23種設計模式匯總]設計模式_原型模式

[23種設計模式匯總]設計模式_原型模式

ID:15406327

大?。?41.00 KB

頁數(shù):12頁

時間:2018-08-03

[23種設計模式匯總]設計模式_原型模式_第1頁
[23種設計模式匯總]設計模式_原型模式_第2頁
[23種設計模式匯總]設計模式_原型模式_第3頁
[23種設計模式匯總]設計模式_原型模式_第4頁
[23種設計模式匯總]設計模式_原型模式_第5頁
資源描述:

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

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

2、,這演示了原型模式。一個細胞分裂,產(chǎn)生兩個同樣基因型的細胞。換句話說,細胞克隆了自己。使用細胞分裂例子的Prototype模式對象圖原型模式解說我們考慮這樣一個場景,假定我們要開發(fā)一個調(diào)色板,用戶單擊調(diào)色板上任一個方塊,將會返回一個對應的顏色的實例,下面我們看看如何通過原型模式來達到系統(tǒng)動態(tài)加載具體產(chǎn)品的目的。很自然,我們利用OO的思想,把每一種顏色作為一個對象,并為他們抽象出一個公用的父類,如下圖:實現(xiàn)代碼:publicabstractclassColor{publicabstractvoidDisplay();}publicclassRedColor:Color{publicoverri

3、devoidDisplay(){Console.WriteLine("Red'sRGBValuesare:255,0,0");}}publicclassGreenColor:Color{publicoverridevoidDisplay(){Console.WriteLine("Green'sRGBValuesare:0,255,0");}}客戶程序需要某一種顏色的時候,只需要創(chuàng)建對應的具體類的實例就可以了。但是這樣我們并沒有達到封裝變化點的目的,也許你會說,可以使用工廠方法模式,為每一個具體子類定義一個與其等級平行的工廠類,那么好,看一下實現(xiàn):實現(xiàn)代碼:publicabstractclas

4、sColorFactory{publicabstractColorCreate();}publicclassRedFactory:ColorFactory{publicoverrideColorCreate(){returnnewRedColor();}}publicclassGreenFactory:ColorFactory{publicoverrideColorCreate(){returnnewGreenColor();}}實現(xiàn)了這一步之后,可以看到,客戶程序只要調(diào)用工廠方法就可以了。似乎我們用工廠方法模式來解決是沒有問題的。但是,我們考慮的僅僅是封裝了new變化,而沒有考慮顏色的數(shù)量

5、是不斷變化的,甚至可能是在程序運行的過程中動態(tài)增加和減少的,那么用這種方法實現(xiàn),隨著顏色數(shù)量的不斷增加,子類的數(shù)量會迅速膨大,導致子類過多,顯然用工廠方法模式有些不大合適。進一步思考,這些Color子類僅僅在初始化的顏色對象類別上有所不同。添加一個ColorTool這樣的類,來參數(shù)化的它的實例,而這些實例是由Color支持和創(chuàng)建的。我們讓ColorTool通過克隆或者拷貝一個Color子類的實例來創(chuàng)建新的Color,這個實例就是一個原型。如下圖所示:實現(xiàn)代碼:abstractclassColorPrototype{publicabstractColorPrototypeClone();}cl

6、assConcteteColorPrototype:ColorPrototype{privateint_red,_green,_blue;publicConcteteColorPrototype(intred,intgreen,intblue){this._red=red;this._green=green;this._blue=blue;}publicoverrideColorPrototypeClone(){//實現(xiàn)淺拷貝return(ColorPrototype)this.MemberwiseClone();}publicvoidDisplay(string_colorname){Co

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

當前文檔最多預覽五頁,下載文檔查看全文

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

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