




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、C#C#面向?qū)ο笤O(shè)計(jì)模式縱橫談面向?qū)ο笤O(shè)計(jì)模式縱橫談 學(xué)習(xí)筆記學(xué)習(xí)筆記 6 6 PrototypePrototype原型(創(chuàng)建型模式)原型(創(chuàng)建型模式)本文關(guān)鍵字:本文關(guān)鍵字:Prototype 模式的動(dòng)機(jī)在軟件系統(tǒng)中,經(jīng)常面臨著某些結(jié)構(gòu)復(fù)雜的對(duì)象的創(chuàng)建工作;由于需求的變化,這些對(duì)象經(jīng)常面臨著劇烈的變化,但是它們卻擁有比較穩(wěn)定一致的接口。如何應(yīng)對(duì)這種變化?如何向客戶程序(使用這些對(duì)象的程序)隔離出這些易變對(duì)象 ,從而使得依賴這些易變對(duì)象的客戶程序不隨著需求改變而改變?Prototype 模式的意圖使用原型實(shí)例指定創(chuàng)建對(duì)象的種類,然后通過拷貝這些原型來創(chuàng)建新的對(duì)象。下面看看代碼首先我們有三個(gè)穩(wěn)定
2、的抽象基類publicabstractclassNormalActor.publicabstractNormalActorClone();publicabstractclassFlyActor.publicabstractFlyActorClone();publicabstractclassWaterActor.publicabstractWaterActorClone();這三個(gè)抽象基類是比較穩(wěn)定的類現(xiàn)在每個(gè)抽象基類里都有兩個(gè)派生類,并且實(shí)現(xiàn)了抽象方法 Clone。publicclassNormalActorA:NormalActor.publicoverrideNormalActorClo
3、ne()1234512345.return(NormalActor)this.MemberwiseClone();publicclassNormalActorB:NormalActor.本文關(guān)鍵字:本文關(guān)鍵字:publicoverrideNormalActorClone().return(NormalActor)this.MemberwiseClone();publicclassFlyActorA:FlyActor.publicoverrideFlyActorClone().return(FlyActor)this.MemberwiseClone();publicclassFlyAcotrB:
4、FlyActor1234512345 .publicoverrideFlyActorClone().return(FlyActor)this.MemberwiseClone();return(WaterActor)this.MemberwiseClone();publicclassWaterActorB:WaterActor.publicoverrideWaterActorClone()1234512345.return(WaterActor)this.MemberwiseClone();那么這些派生類可以說不是很穩(wěn)定的,他們可以被擴(kuò)展。那么現(xiàn)在有一個(gè) GameSystem 類,這個(gè)類有一個(gè)方
5、法publicclassGameSystem.publicstaticvoidRun(NormalActornormalActor,FlyActorflyActor,WaterActorwaterActor).NormalActornormalActor1=normalActor.Clone();&n本文關(guān)鍵字:本文關(guān)鍵字:FlyActorflyActor2=flyActor.Clone();WaterActorwaterActor1=waterActor.Clone();WaterActorwaterActor2=waterActor.Clone();1234512345 注意在這個(gè)方法里的
6、參數(shù) normalActor 等對(duì)象可以置為字段,這個(gè)是不重要的。重要的是我們根據(jù)給定的三個(gè)類型的實(shí)例,通過 Clone 方法,來創(chuàng)建相應(yīng)的拷貝對(duì)象。那么當(dāng)我們調(diào)用 Run 方法的時(shí)候staticvoidMain(stringargs).GameSystem.Run(newNormalActorA(),newFlyActorA(),newWaterAcotrA();我們通過傳入的對(duì)象的類型,使 Run 方法里的創(chuàng)建的對(duì)象與傳入的對(duì)象一致。但是我們使用 MemberwiseClone 方法的時(shí)候要注意,這是一個(gè)淺拷貝對(duì)象的方法,對(duì)于一個(gè)字段都為值類型的類是適用的,但是,如果有引用類型,這樣會(huì)導(dǎo)致
7、同一塊內(nèi)存被兩個(gè)引用指向。我們可以在 Clone 方法里對(duì)此進(jìn)行處理,講對(duì)象字段新 new 出來,并且逐項(xiàng)賦值。也可以實(shí)現(xiàn)序列化接口,讓類序列化,那么拷貝的時(shí)候是新生成的對(duì)象。Prototype 模式的幾個(gè)要點(diǎn)Prototype 模式同樣用于隔離類對(duì)象的使用者和具體類型(易變類)之間的耦合關(guān)系,它同樣要求這些易變類擁有穩(wěn)定的接口。Prototype 模式對(duì)于如何創(chuàng)建易變類的實(shí)體對(duì)象采用原型克隆的方法來做,它使得我們可以非常靈活地動(dòng)態(tài)創(chuàng)建擁有某些穩(wěn)定接口的新對(duì)象-所需工作僅僅是注冊(cè)一個(gè)新類的對(duì)象(即原型),然后在任何需要的地方不斷地 Clone。Prototype 模式中的 Clone 方法可以利用.NET 中的 Object 類的MemberwiseClone()方法或者序列化來實(shí)現(xiàn)深拷貝。有關(guān)創(chuàng)建性模式的討論Singleton 模式解決的是實(shí)體對(duì)象個(gè)數(shù)的問題。除了 Singleton 之外,其他創(chuàng)建型模式解決的都是 new 所帶來的耦合關(guān)系。Factory Method, Abstract Factory, Builder 都需要一個(gè)額外的工廠類來負(fù)責(zé)實(shí)例化易變對(duì)象,而 Prototype 則是通過原型(一個(gè)特殊的工廠類)來克隆易變對(duì)象。如果遇到易變類,起初的設(shè)計(jì)通常從
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 精英人才甄選:潛質(zhì)干部面試題庫精 編版
- 企業(yè)運(yùn)營戰(zhàn)略下的奇葩面試題目解讀
- 保研面試經(jīng)驗(yàn)分享:專業(yè)領(lǐng)域的求職策略與題目
- 2026屆黑龍江省大慶市化學(xué)高一上期末復(fù)習(xí)檢測(cè)試題含解析
- 納米技術(shù)教學(xué)講解
- 配套制度案例講解
- 新疆烏魯木齊市2026屆化學(xué)高二上期末教學(xué)質(zhì)量檢測(cè)試題含答案
- 詳解紀(jì)念辛亥革命110周年全文解讀
- 數(shù)學(xué)年齡倍數(shù)講解
- 新醫(yī)院發(fā)展規(guī)劃
- 深圳市失業(yè)人員停止領(lǐng)取失業(yè)保險(xiǎn)待遇申請(qǐng)表樣表
- 信任五環(huán)書籍讀書提綱課件
- 江蘇居住建筑標(biāo)準(zhǔn)化外窗系統(tǒng)應(yīng)用技術(shù)規(guī)程157-2017
- (完整版)內(nèi)孔數(shù)控車削加工(編程)教案
- 道亨鐵塔長短腿基礎(chǔ)配置系統(tǒng)-操作說明
- 皮瓣移植術(shù)后移植(再植)組織的局部觀察課件
- DB11-T 1764.42-2020用水定額 第42部分:居民生活
- 蒂森克虜伯電梯 MC2-B控制系統(tǒng)用戶手冊(cè)
- 醫(yī)療器械嵌入式軟件注冊(cè)描述文檔
- 工程認(rèn)證《機(jī)械設(shè)計(jì)》課程教學(xué)大綱
- 建設(shè)工程五方責(zé)任主體法定代表人授權(quán)書、項(xiàng)目負(fù)責(zé)人質(zhì)量終身責(zé)任承諾書
評(píng)論
0/150
提交評(píng)論