設(shè)置模式23種類(lèi)圖_第1頁(yè)
已閱讀1頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、談到設(shè)計(jì)模式,絕對(duì)應(yīng)該一起來(lái)說(shuō)說(shuō)重構(gòu)。重構(gòu)給我們帶來(lái)了什么?除了作為對(duì)遺留代碼的改進(jìn)的方法,另一大意義在于,可以讓我們?cè)趯?xiě)程序的時(shí)候可以不需事先考慮太多的代碼組織問(wèn)題,當(dāng)然這其中也包括了應(yīng)用模式的問(wèn)題。盡管大多數(shù)開(kāi)發(fā)者都已經(jīng)養(yǎng)成了寫(xiě)代碼前先從設(shè)計(jì)開(kāi)始的習(xí)慣,但是,這種程度的設(shè)計(jì),涉及到到大局、到總體架構(gòu)、到主要的模塊劃分我覺(jué)得就夠了。換句話說(shuō),這時(shí)就能寫(xiě)代碼了。這就得益于重構(gòu)的思想了。如果沒(méi)有重構(gòu)的思想,有希望獲得非常高質(zhì)量的代碼,我們

2、就不得不在開(kāi)始寫(xiě)代碼前考慮更多其實(shí)并非非常穩(wěn)定的代碼組織及設(shè)計(jì)模式的應(yīng)用問(wèn)題,那開(kāi)發(fā)效率當(dāng)然就大打折扣了。在重構(gòu)和設(shè)計(jì)模式的合理應(yīng)用之下,我們可以相對(duì)較早的開(kāi)始寫(xiě)代碼,并在功能盡早實(shí)現(xiàn)的同時(shí),不斷地通過(guò)重構(gòu)和模式來(lái)改善我們的代碼質(zhì)量。所以,下面的章節(jié)中,在談模式的同時(shí),我也會(huì)談?wù)勱P(guān)于常用的這些模式的重構(gòu)成本的理解。重構(gòu)成本越高意味著,在遇到類(lèi)似的問(wèn)題情形的時(shí)候,我們更應(yīng)該提前考慮應(yīng)用對(duì)應(yīng)的設(shè)計(jì)模式,而重構(gòu)成本比較低則說(shuō)明,類(lèi)似的情形下,

3、完全可以先怎么方便,怎么快怎么寫(xiě),哪怕代碼不是很優(yōu)雅也沒(méi)關(guān)系,回頭再重構(gòu)也很容易。1創(chuàng)建型創(chuàng)建型1.11.1FactyFactyMethodMethod思想:思想:FactyMethod的主要思想是使一個(gè)類(lèi)的實(shí)例化延遲到其子類(lèi)。場(chǎng)景:場(chǎng)景:典型的應(yīng)用場(chǎng)景如:在某個(gè)系統(tǒng)開(kāi)發(fā)的較早階段,有某些類(lèi)的實(shí)例化過(guò)程,實(shí)例化方式可能還不是很確定,或者實(shí)際實(shí)例化的對(duì)象(可能是需要對(duì)象的某個(gè)子類(lèi)中的一個(gè))不確定,或者比較容易變化。此時(shí),如果直接將實(shí)例化過(guò)

4、程寫(xiě)在某個(gè)函數(shù)中,那么一般就是ifelse或case代碼。如果,候選項(xiàng)的數(shù)目較少、類(lèi)型基本確定,那么這樣的ifelse還是可以接受的,一旦情形變得復(fù)雜、不確定性增加,更甚至包含這個(gè)構(gòu)造過(guò)程的函數(shù)所在的類(lèi)包含幾個(gè)甚至更多類(lèi)似的函數(shù)時(shí),這樣的ifelse代碼就會(huì)變得比較不那么容易維護(hù)了。此時(shí),應(yīng)用本模式,可以將這種復(fù)雜情形隔離開(kāi),即將這類(lèi)不確定的對(duì)象的實(shí)例化過(guò)程延遲到子類(lèi)。實(shí)現(xiàn):實(shí)現(xiàn):該模式的典型實(shí)現(xiàn)方法就是將調(diào)用類(lèi)定義為一個(gè)虛類(lèi),在調(diào)用類(lèi)

5、定義一個(gè)專(zhuān)門(mén)用于構(gòu)造不確定的對(duì)象實(shí)例的虛函數(shù),再將實(shí)際的對(duì)象實(shí)例化代碼留到調(diào)用類(lèi)的子類(lèi)來(lái)實(shí)現(xiàn)。如果,被構(gòu)造的對(duì)象比較復(fù)雜的話,同時(shí)可以將這個(gè)對(duì)象定義為可以繼承、甚至虛類(lèi),再在不同的調(diào)用類(lèi)的子類(lèi)中按需返回被構(gòu)造類(lèi)的子類(lèi)。1.31.3BuilderBuilder思想:思想:將一個(gè)類(lèi)的創(chuàng)建過(guò)程和他的主體部分分離。場(chǎng)景:場(chǎng)景:該模式的典型的應(yīng)用場(chǎng)景是:一個(gè)類(lèi)的創(chuàng)建過(guò)程可能比較復(fù)雜,或者創(chuàng)建過(guò)程中的某些階段可能會(huì)容易變化;或者多個(gè)類(lèi)的創(chuàng)建過(guò)程比較

6、類(lèi)似,但是主體不同。實(shí)現(xiàn):實(shí)現(xiàn):在以上提到的兩種場(chǎng)景中,我們就可以取出一個(gè)類(lèi)的創(chuàng)建過(guò)程的代碼,定義一個(gè)專(zhuān)門(mén)的Builder類(lèi),而在原來(lái)創(chuàng)建類(lèi)對(duì)象實(shí)例的地方,將這個(gè)Builder類(lèi)的實(shí)例作為參數(shù)傳入。還有第二個(gè)重點(diǎn),就是Builder類(lèi)可以將將整個(gè)創(chuàng)建過(guò)程分為幾個(gè)階段,每個(gè)階段不必在類(lèi)中直接實(shí)現(xiàn),而可以通過(guò)繼承體系在子類(lèi)中實(shí)現(xiàn),或者通過(guò)子類(lèi)的方法過(guò)載來(lái)修改創(chuàng)建過(guò)程中的某個(gè)階段,但是重用其他的階段??梢园l(fā)現(xiàn),該模式將一個(gè)對(duì)象的復(fù)雜創(chuàng)建過(guò)程重

7、用到非常高的層次。這正是它的意義所在。重構(gòu)成本:重構(gòu)成本:低。該模式的重構(gòu)成本我覺(jué)得是非常低的,因?yàn)橐话銇?lái)講,創(chuàng)建過(guò)程的代碼本來(lái)也就應(yīng)該在原來(lái)的類(lèi)的構(gòu)造函數(shù)中,把它Extract出來(lái)就好了。如果發(fā)現(xiàn)多個(gè)類(lèi)的創(chuàng)建過(guò)程有比較多的代碼重復(fù)或類(lèi)似,那么就可以重用這些提取出來(lái)的Builder類(lèi)或者Builder類(lèi)中的某些階段。1.41.4PrototypePrototype思想:思想:克隆一個(gè)已有的類(lèi)的實(shí)例(大家相比都用過(guò)甚至寫(xiě)過(guò)類(lèi)的Clone實(shí)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論