下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 Java 程序員應(yīng)該了解的10個(gè)面向?qū)ο笤O(shè)計(jì)原則面向?qū)ο笤O(shè)計(jì)原則是OOPS (Object-Oriented Programming System ,面向?qū)ο蟮某绦蛟O(shè)計(jì)系統(tǒng))編程的核心,但大多數(shù)Java 程序員追逐像Singleton 、Decorator 、Observer 這樣的設(shè)計(jì)模式,而不重視面向?qū)ο蟮姆治龊驮O(shè)計(jì)。甚至還有經(jīng)驗(yàn)豐富的Java 程序員沒(méi)有聽(tīng)說(shuō)過(guò)OOPS 和SOLID 設(shè)計(jì)原則,他們根本不知道設(shè)計(jì)原則的好處,也不知道如何依照這些原則來(lái)進(jìn)行編程。眾所周知,Java 編程最基本的原則就是要追求高內(nèi)聚和低耦合的解決方案和代碼模塊設(shè)計(jì)。查看Apache 和Sun 的開(kāi)放源代碼能幫
2、助你發(fā)現(xiàn)其他Java 設(shè)計(jì)原則在這些代碼中的實(shí)際運(yùn)用。Java Development Kit 則遵循以下模式:BorderFactory 類中的工廠模式、Runtime 類中的單件模式。你可以通過(guò)Joshua Bloch 的Effective Java 一書(shū)來(lái)了解更多信息。我個(gè)人偏向的另一種面向?qū)ο蟮脑O(shè)計(jì)模式是Kathy Sierra的Head First Design Pattern以及Head First Object Oriented Analysis and Design。雖然實(shí)際案例是學(xué)習(xí)設(shè)計(jì)原則或模式的最佳途徑,但通過(guò)本文的介紹,沒(méi)有接觸過(guò)這些原則或還在學(xué)習(xí)階段的Java 程序員
3、也能夠了解這10個(gè)面向?qū)ο蟮脑O(shè)計(jì)原則。其實(shí)每條原則都需要大量的篇幅才能講清楚,但我會(huì)盡力做到言簡(jiǎn)意賅。原則1:DRY (Don't repeat yourself)即不要寫(xiě)重復(fù)的代碼,而是用“abstraction ”類來(lái)抽象公有的東西。如果你需要多次用到一個(gè)硬編碼值,那么可以設(shè)為公共常量;如果你要在兩個(gè)以上的地方使用一個(gè)代碼塊,那么可以將它設(shè)為一個(gè)獨(dú)立的方法。SOLID 設(shè)計(jì)原則的優(yōu)點(diǎn)是易于維護(hù),但要注意,不要濫用,duplicate 不是針對(duì)代碼,而是針對(duì)功能。這意味著,即使用公共代碼來(lái)驗(yàn)證OrderID 和SSN ,二者也不會(huì)是相同的。使用公共代碼來(lái)實(shí)現(xiàn)兩個(gè)不同的功能,其實(shí)就是近
4、似地把這兩個(gè)功能永遠(yuǎn)捆綁到了一起,如果OrderID 改變了其格式,SSN 驗(yàn)證代碼也會(huì)中斷。因此要慎用這種組合,不要隨意捆綁類似但不相關(guān)的功能。原則2:封裝變化在軟件領(lǐng)域中唯一不變的就是“Change ”,因此封裝你認(rèn)為或猜測(cè)未來(lái)將發(fā)生變化的代碼。OOPS 設(shè)計(jì)模式的優(yōu)點(diǎn)在于易于測(cè)試和維護(hù)封裝的代碼。如果你使用Java 編碼,可以默認(rèn)私有化變量和方法,并逐步增加訪問(wèn)權(quán)限,比如從private 到protected 和not public 。有幾種Java 設(shè)計(jì)模式也使用封裝,比如Factory 設(shè)計(jì)模式是封裝“對(duì)象創(chuàng)建”,其靈活性使得之后引進(jìn)新代碼不會(huì)對(duì)現(xiàn)有的代碼造成影響。原則3:開(kāi)閉原則即
5、對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。這是另一種非常棒的設(shè)計(jì)原則,可以防止其他人更改已經(jīng)測(cè)試好的代碼。理論上,可以在不修改原有的模塊的基礎(chǔ)上,擴(kuò)展功能。這也是開(kāi)閉原則的宗旨。 原則4:?jiǎn)我宦氊?zé)原則類被修改的幾率很大,因此應(yīng)該專注于單一的功能。如果你把多個(gè)功能放在同一個(gè)類中,功能之間就形成了關(guān)聯(lián),改變其中一個(gè)功能,有可能中止另一個(gè)功能,這時(shí)就需要新一輪的測(cè)試來(lái)避免可能出現(xiàn)的問(wèn)題。原則5:依賴注入或倒置原則這個(gè)設(shè)計(jì)原則的亮點(diǎn)在于任何被DI 框架注入的類很容易用mock 對(duì)象進(jìn)行測(cè)試和維護(hù),因?yàn)閷?duì)象創(chuàng)建代碼集中在框架中,客戶端代碼也不混亂。有很多方式可以實(shí)現(xiàn)依賴倒置,比如像AspectJ 等的AOP (Aspec
6、t Oriented programming)框架使用的字節(jié)碼技術(shù),或Spring 框架使用的代理等。原則6:優(yōu)先利用組合而非繼承如果可能的話,優(yōu)先利用組合而不是繼承。一些人可能會(huì)質(zhì)疑,但我發(fā)現(xiàn),組合比繼承靈活得多。組合允許在運(yùn)行期間通過(guò)設(shè)置類的屬性來(lái)改變類的行為,也可以通過(guò)使用接口來(lái)組合一個(gè)類,它提供了更高的靈活性,并可以隨時(shí)實(shí)現(xiàn)。Effective Java 也推薦此原則。原則7:里氏代換原則(LSP )根據(jù)該原則,子類必須能夠替換掉它們的基類,也就是說(shuō)使用基類的方法或函數(shù)能夠順利地引用子類對(duì)象。LSP 原則與單一職責(zé)原則和接口分離原則密切相關(guān),如果一個(gè)類比子類具備更多功能,很有可能某些功
7、能會(huì)失效,這就違反了LSP 原則。為了遵循該設(shè)計(jì)原則,派生類或子類必須增強(qiáng)功能。原則8:接口分離原則采用多個(gè)與特定客戶類有關(guān)的接口比采用一個(gè)通用的涵蓋多個(gè)業(yè)務(wù)方法的接口要好。設(shè)計(jì)接口很棘手,因?yàn)橐坏┽尫沤涌?,你就無(wú)法在不中斷執(zhí)行的情況下改變它。在Java 中,該原則的另一個(gè)優(yōu)勢(shì)在于,在任何類使用接口之前,接口不利于實(shí)現(xiàn)所有的方法,所以單一的功能意味著更少的實(shí)現(xiàn)方法。原則9:針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程該原則可以使代碼更加靈活,以便可以在任何接口實(shí)現(xiàn)中使用。因此,在Java 中最好使用變量接口類型、方法返回類型、方法參數(shù)類型等。Effective Java 和head first design pattern 書(shū)中也有提到。原則10:委托原則該原則最典型的例子是Java 中的equals( 和 hashCode( 方法。為了平等地比較兩個(gè)對(duì)象,我們用類本身而不是客戶端類來(lái)做比
溫馨提示
- 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ù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 美術(shù)延時(shí)特色課程設(shè)計(jì)
- 那些課程設(shè)計(jì)大數(shù)據(jù)
- 2024年耐磨碳化鎢管裝純合金粉電焊條項(xiàng)目可行性研究報(bào)告
- 2024年斜紗綢項(xiàng)目可行性研究報(bào)告
- 調(diào)查校本課程設(shè)計(jì)與評(píng)價(jià)
- 中國(guó)防噴器行業(yè)現(xiàn)狀動(dòng)態(tài)及未來(lái)趨勢(shì)預(yù)測(cè)研究報(bào)告(2024-2030版)
- 中國(guó)金屬硅行業(yè)經(jīng)營(yíng)態(tài)勢(shì)與供需趨勢(shì)預(yù)測(cè)研究報(bào)告(2024-2030版)
- 中國(guó)轉(zhuǎn)矩測(cè)量?jī)x表行業(yè)應(yīng)用態(tài)勢(shì)與投資規(guī)劃分析研究報(bào)告(2024-2030版)
- 中國(guó)胎面再生橡膠行業(yè)消費(fèi)狀況及競(jìng)爭(zhēng)格局分析研究報(bào)告(2024-2030版)
- 中國(guó)聚丙烯膜行業(yè)發(fā)展動(dòng)態(tài)及需求規(guī)模預(yù)測(cè)研究報(bào)告(2024-2030版)
- 安全使用家電和煤氣課件
- 《GPS測(cè)量與數(shù)據(jù)處理》-第3講 全球定位系統(tǒng)組成及信號(hào)結(jié)構(gòu)
- 前置胎盤(pán)詳解課件
- 達(dá)爾文的“進(jìn)化論”課件
- 國(guó)開(kāi)電大《建筑測(cè)量》實(shí)驗(yàn)報(bào)告1
- 《火災(zāi)自動(dòng)報(bào)警系統(tǒng)設(shè)計(jì)規(guī)范》
- 南京市小學(xué)一年級(jí)語(yǔ)文上學(xué)期期中試卷
- 合肥工業(yè)大學(xué)-孫冠東-答辯通用PPT模板
- 國(guó)開(kāi)作業(yè)《管理學(xué)基礎(chǔ)》管理實(shí)訓(xùn):第一章訪問(wèn)一個(gè)工商企業(yè)或一位管理者參考(含答案)280
- 膀胱過(guò)度活動(dòng)癥的診斷與治療
- 幼兒園繪本故事:《神奇雨傘店》 課件
評(píng)論
0/150
提交評(píng)論