版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
設(shè)計(jì)方式的入門(mén)戰(zhàn)略方式本章的學(xué)習(xí)要點(diǎn)了解設(shè)計(jì)方式的用途和優(yōu)點(diǎn)掌握設(shè)計(jì)OO的根本原那么了解本章所舉的實(shí)例開(kāi)發(fā)實(shí)例實(shí)例描畫(huà):我們要開(kāi)發(fā)一個(gè)游戲鴨子,可以戲水,可以鳴叫。而且,在游戲中能夠出現(xiàn)很多各種各樣的鴨子。設(shè)計(jì):將設(shè)置一個(gè)鴨子超類(lèi),處理一切鴨子的共有操作,如游泳,鳴叫等,子類(lèi)實(shí)現(xiàn)本人特殊的操作。超類(lèi),實(shí)現(xiàn)共有的東西,將有特征的東西設(shè)為籠統(tǒng)方法綠頭鴨紅頭鴨添加方法假設(shè)需求給鴨子添加飛的方法,根據(jù)OO帶來(lái)的問(wèn)題超類(lèi)添加一種方法,必然給一切的子類(lèi)帶來(lái)同樣的方法。上述的例子,就是一切的鴨子都可以飛。如何處理這個(gè)問(wèn)題:我們可以采用子類(lèi)方法覆蓋的方法,如橡皮鴨子不會(huì)飛,覆蓋橡皮鴨子飛的方法。分析上面我們采用承繼的來(lái)處理程序的開(kāi)放性和可擴(kuò)展性,遇到了問(wèn)題,為什么會(huì)這樣?由于超類(lèi)作為一切類(lèi)的父類(lèi),擁有一切子類(lèi)的共性,但未來(lái)會(huì)出現(xiàn)什么子類(lèi),無(wú)從得知,因此,無(wú)法確定哪些是共性方法和共性屬性。承繼承繼本是為了代碼的復(fù)用,節(jié)省子類(lèi)的代碼。但由于未來(lái)的不確定性,無(wú)法預(yù)知子類(lèi)的多少?承繼必需有父類(lèi)和子類(lèi),確定父類(lèi)的屬性和方法很關(guān)鍵。承繼的問(wèn)題代碼在多個(gè)子類(lèi)出現(xiàn)不用要的反復(fù)無(wú)法事先預(yù)知一切的子類(lèi)的一切行為改動(dòng)父類(lèi),會(huì)同時(shí)改動(dòng)子類(lèi)。采用接口接口在Java中是一個(gè)非常重要的概念Java不支持多承繼,但一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口。采用接口覆蓋鴨子飛和叫的方法,每一個(gè)會(huì)飛的或會(huì)叫的子類(lèi)實(shí)現(xiàn)接口。接口帶來(lái)的問(wèn)題接口可以讓每一個(gè)子類(lèi)本人實(shí)現(xiàn)有特征的方法。子類(lèi)的代碼無(wú)法重用,每一個(gè)子類(lèi)都實(shí)現(xiàn)接口,即使子類(lèi)的行為完全一致,也必需各自實(shí)現(xiàn)。軟件編寫(xiě)盡量少修正遇到新情況,希望不修正程序或少修正程序。程序必需順應(yīng)變化,而本身需求穩(wěn)定。最不變的就是變化需求改動(dòng)平臺(tái)改動(dòng)數(shù)據(jù)改動(dòng)程序設(shè)計(jì)原那么找出運(yùn)用中能夠需求變化之處,將其獨(dú)立出來(lái),把它們和無(wú)需變化的代碼分割開(kāi),分而治之。當(dāng)需求改動(dòng)時(shí),代碼需求改動(dòng),這部分是可變的,從而區(qū)分出那些是需求改動(dòng)的,哪些是穩(wěn)定的代碼。上面的例子中,duck類(lèi)中,fly(),quack()方法會(huì)隨著duck的不同而改動(dòng),因此提取出來(lái)duckflyquack我們將duck的fly行為和quack行為分別設(shè)計(jì)一個(gè)類(lèi)。設(shè)計(jì)原那么針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程。我們利用接口代表每一個(gè)行為,如FlyBehaviorQuackBehaviorDuck類(lèi)不實(shí)現(xiàn)這個(gè)接口,而是由我們?cè)O(shè)立的行為類(lèi)來(lái)實(shí)現(xiàn)。<<interface>>FlyBehaviorfly()FlyWithWingsfly(){…}FlyNoWayfly(){nothing}設(shè)計(jì)新的類(lèi)時(shí),子類(lèi)運(yùn)用接口所表示的行為,實(shí)如今行為類(lèi)中,而不在子類(lèi)中。接口可以實(shí)現(xiàn)多態(tài)在聲明對(duì)象變量時(shí),最好用超類(lèi)型。AnimalmakeSound()DogmakeSound〔〕{bark();}Bark(){汪汪叫』CatmakeSound(){meow();}meow(){喵喵叫』Dogd=newDog()d.bark();Animalanimal=newDog();animal.makeSound();a=getAnimal();a.makeSound();實(shí)現(xiàn)鴨子的飛行行為<<interface>>FlyBehaviorfly()FlyWithWingsfly(){…}FlyNoWayfly(){nothing}實(shí)現(xiàn)鴨子的鳴叫行為<<interface>>QuackBehaviorquack()Quackquack(){普通鴨子叫}MuteQuackquack(){nothing}Squackquack(){橡皮鴨子叫}上述的設(shè)計(jì),讓鳴叫,飛行等行為曾經(jīng)與duck類(lèi)無(wú)關(guān)了,我們添加duck類(lèi)的行為,不會(huì)影響到鳴叫,飛行等行為留意的問(wèn)題剛開(kāi)場(chǎng)設(shè)計(jì)程序時(shí),能夠不會(huì)完全預(yù)測(cè)未來(lái)的情況,因此,應(yīng)該使程序堅(jiān)持足夠的彈性,以應(yīng)付未來(lái)的能夠的變化。事先思索的面面俱到是不能夠的。飛行,鳴叫等的動(dòng)作行為成為一個(gè)類(lèi)是可以的。思索題假設(shè)如今有了一種新的玩具duck,它采用螺旋漿飛行,該如何處置。什么類(lèi)還會(huì)用到FlywithWings設(shè)計(jì)思想的實(shí)現(xiàn)根據(jù)前面我們的設(shè)計(jì),我們來(lái)實(shí)現(xiàn)duck類(lèi)DuckFlyBehaviorflyBehaviorQuackBehaviorquackBehaviorperformQuack()Swim()Display()performFlay()publicclassDuck{QuackBehaviorquackBehavior;publicvoidperformQuack(){quackBehavior.quack();}子類(lèi)的詳細(xì)實(shí)現(xiàn)publicclassMallardDuckextendsDuck{publicMallardDuck(){quackBehavior=newQuack();flyBehavior=newFlyWithWings();}publicvoiddisplay(){System.out.pringln(“〞);}}動(dòng)態(tài)設(shè)定行為Duck類(lèi)中參與兩個(gè)新方法:publicvoidSetFlyBehavior(FlyBehaviorfb){flyBehavior=fb;}publicvoidSetQuackBehavior(QuackBehaviorqb){quackBehavior=qb;}產(chǎn)生一個(gè)模型鴨publicclassModelDuckextendsDuck{publicModelDuck(){ quackBehavior=newQuack(); flyBehavior=newFlyNoWay();}publicvoiddisplay(){ System.out.println("Iamamodelduck");}}產(chǎn)生一個(gè)新的飛行類(lèi)publicclassFlyRocketPoweredimplementsFlyBehavior{publicvoidfly(){System.out.println(“Iamflyingwithrocket〞);}動(dòng)態(tài)改動(dòng)行為Duckmodel=newModelDuck();model.performFly();model.setFlyBehavior(newFlyRocketPowered());Model.performFly();封裝行為DuckFlyBehaviorflyBehaviorQuackBehaviorquackBehaviorSwim()Display()performFly()performBehavior()..封裝了飛行行為封裝了鳴叫行為組合和承繼承繼是isa關(guān)系組合是hasa關(guān)系設(shè)計(jì)原那么,多用組合,少用承繼承繼的優(yōu)點(diǎn)是代碼的復(fù)用,節(jié)省初次開(kāi)發(fā)的時(shí)間。但添加了后期維護(hù)的費(fèi)用。沒(méi)有哪一個(gè)軟件開(kāi)發(fā)完成后,就一成不變的。后期的維護(hù)所破費(fèi)的時(shí)間遠(yuǎn)遠(yuǎn)大于前期開(kāi)發(fā)的時(shí)間。戰(zhàn)略方式定義了算法簇,分別封裝起來(lái),讓它們之間可以相互交換,讓算法的變化獨(dú)立于算法的的運(yùn)用者。思索迷題p25設(shè)計(jì)方式的運(yùn)用每一個(gè)行業(yè)都有本人的行話(huà),軟件設(shè)計(jì)也不例外。采用行話(huà)可以節(jié)省很多時(shí)間,行話(huà)的信息量大在軟件行業(yè),設(shè)計(jì)所采用的各種方式就是設(shè)計(jì)者之間的行話(huà)。運(yùn)用共享方式的益處減少溝通的信息量站的層次較高不易產(chǎn)生誤解有利于剛參與任務(wù)人的提高設(shè)計(jì)方式的運(yùn)用設(shè)計(jì)方式的運(yùn)用首先在于設(shè)計(jì)者采用設(shè)計(jì)方式來(lái)對(duì)軟件進(jìn)展分析設(shè)計(jì)。設(shè)計(jì)方式在于如何組織每一個(gè)類(lèi)及類(lèi)之間的關(guān)系。等級(jí)高于庫(kù)和框架。因該說(shuō)庫(kù)和框架也運(yùn)用了某種設(shè)計(jì)方式。沒(méi)有關(guān)于設(shè)計(jì)方式的庫(kù)。設(shè)計(jì)方式和OO原那么的聯(lián)絡(luò)和區(qū)別了解和掌握OO原那么并不能設(shè)計(jì)出高質(zhì)量,開(kāi)放性好的優(yōu)質(zhì)軟件。設(shè)計(jì)方式在于可以更好的運(yùn)用OO原那么,設(shè)計(jì)出順應(yīng)變化的軟件。設(shè)計(jì)是一門(mén)藝術(shù),取舍很重要,不同人即使運(yùn)用一樣的設(shè)計(jì)方式,也不一定設(shè)計(jì)的軟件一樣。設(shè)計(jì)時(shí)一定要思索未來(lái)的變化,千萬(wàn)不要寫(xiě)死。OO根底籠統(tǒng)封裝多態(tài)承繼OO方式 戰(zhàn)略方式:定義一組算法簇,分別封裝起來(lái),可以相互交換,讓算法的變化獨(dú)立于運(yùn)用者OO原那
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GBT 34286-2017 溫室氣體 二氧化碳測(cè)量 離軸積分腔輸出光譜法專(zhuān)題研究報(bào)告
- 薪酬稅務(wù)專(zhuān)員面試題目集
- 客戶(hù)服務(wù)經(jīng)理面試常見(jiàn)問(wèn)題及答案參考
- 銷(xiāo)售主管筆試題及銷(xiāo)售團(tuán)隊(duì)管理能力評(píng)估含答案
- 廚師長(zhǎng)崗位面試與技能測(cè)試指南
- 2025年移動(dòng)健康監(jiān)測(cè)設(shè)備開(kāi)發(fā)項(xiàng)目可行性研究報(bào)告
- 2025年數(shù)字貨幣技術(shù)應(yīng)用可行性研究報(bào)告
- 2025年智能醫(yī)療健康監(jiān)測(cè)系統(tǒng)建設(shè)可行性研究報(bào)告
- 2025年中小企業(yè)數(shù)字化轉(zhuǎn)型咨詢(xún)項(xiàng)目可行性研究報(bào)告
- 2025年數(shù)字化智能鎖研發(fā)項(xiàng)目可行性研究報(bào)告
- 《公共部門(mén)人力資源管理》機(jī)考真題題庫(kù)及答案
- 《數(shù)字影像設(shè)計(jì)與制作》統(tǒng)考復(fù)習(xí)考試題庫(kù)(匯總版)
- 國(guó)際學(xué)術(shù)交流英語(yǔ)知到章節(jié)答案智慧樹(shù)2023年哈爾濱工業(yè)大學(xué)
- DB14-T 2644-2023旅游氣候舒適度等級(jí)劃分與評(píng)價(jià)方法
- EVA福音戰(zhàn)士-國(guó)際動(dòng)漫課件
- GB/T 37563-2019壓力型水電解制氫系統(tǒng)安全要求
- GB/T 25085.3-2020道路車(chē)輛汽車(chē)電纜第3部分:交流30 V或直流60 V單芯銅導(dǎo)體電纜的尺寸和要求
- GB/T 1182-2018產(chǎn)品幾何技術(shù)規(guī)范(GPS)幾何公差形狀、方向、位置和跳動(dòng)公差標(biāo)注
- DB37-T 5041-2015 城鎮(zhèn)供水水質(zhì)應(yīng)急監(jiān)測(cè)技術(shù)規(guī)范
- 帆船運(yùn)動(dòng)簡(jiǎn)介課件
- 3章-信息系統(tǒng)質(zhì)量管理課件
評(píng)論
0/150
提交評(píng)論