




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
☆面向?qū)ο蟮钠叽笤瓌t:、☆面向?qū)ο蟮钠叽笤瓌t:1) 開閉原則;------面向擴展開放,面向修改關(guān)閉。2) 里氏轉(zhuǎn)換原則;------超類存在的地方,子類是可以替換的。3) 依賴倒轉(zhuǎn)原則;------實現(xiàn)盡量依賴抽象,不依賴具體實現(xiàn)。4) 接口隔離原則;------應(yīng)當(dāng)為客戶端提供盡可能小的單獨的接口,而不是提供大的總的接口。5) 組合/聚合復(fù)用原則;------盡量使用合成/聚合達到復(fù)用,盡量少用繼承。原則:一個類中有另一個類的對象。6) “迪米特”法則;------又叫最少知識原則,一個軟件實體應(yīng)當(dāng)盡可能少的與其他實體發(fā)生相互作用。7) 單一職責(zé)原則。-----每一個類應(yīng)該專注于做一件事情。二、 開閉原則OCP:開閉原則是設(shè)計原則基礎(chǔ)的基礎(chǔ),是java面向?qū)ο蟮暮诵脑瓌t,其它原則均圍繞開閉原則進行展開。開閉原則指的是一個軟件實體應(yīng)對對擴展開放,對修改關(guān)閉(Softwareentitiesshouldbeopenforextension,butclosedformodification)。這個原則是說在設(shè)計一個模塊的時候,應(yīng)對使這個模塊可以在不被修改的前提下被擴展,換言之,應(yīng)對可以不必修改源代碼的情況下改變這個模塊的行為?!顫M足開閉原則的軟件系統(tǒng)的優(yōu)越性:通過擴展已有的軟件系統(tǒng),可以提供新的行為,以滿足對軟件的新需求,使變化中的軟件系統(tǒng)有一定的適應(yīng)性和靈活性。已有的軟件模塊,特別是最重要的抽象層模塊不能再修改,這就使變化中的軟件系統(tǒng)有一定的穩(wěn)定性和延續(xù)性。☆實現(xiàn)開閉原則的關(guān)鍵抽象化是解決問題的關(guān)鍵,在面向?qū)ο蟮木幊陶Z言里,可以給系統(tǒng)定義出一套相對較為固定的抽象設(shè)計,此設(shè)計允許無窮無盡的行為在實現(xiàn)層被實現(xiàn)。在語言里,可以給出一個或多個抽象類或者接口,規(guī)定出所有的具體類必須提供的方法的特征作為系統(tǒng)設(shè)計的抽象層。這個抽象層預(yù)見了所有的可擴展性,因此,在任何擴展情況下都不會改變。這就使得系統(tǒng)的抽象不需要修改,從而滿足了開閉原則的第二條,對修改關(guān)閉。同時,由于從抽象層導(dǎo)出一個或多個新的具體類可以改變系統(tǒng)的行為,因此系統(tǒng)的設(shè)計對擴展是開放的,這就滿足了開閉原則的第一條?!顚勺冃缘姆庋b原則把變化的東西封裝起來,把不變的抽象出來。這是對開閉原則的另外一種描述,它講的是找到一個系統(tǒng)的可變因素,將之封裝起來。該原則意味著兩點:一種可變性不應(yīng)當(dāng)散落在代碼的很多角落,而應(yīng)當(dāng)封裝到一個對象里面。繼承應(yīng)當(dāng)被看做是封裝變化的方法,而不應(yīng)該被認為是一種從一般對象生成特殊對象的方法。一種可變性不應(yīng)當(dāng)與另外一種可變性混合在一起。這意味著一般的繼承層次不會超過兩層。關(guān)鍵知識點:☆開閉原則的概念,軟件實體對擴展開發(fā),對修改關(guān)閉;☆實現(xiàn)開閉原則的關(guān)鍵,利用接口或抽象類抽象出系統(tǒng)的抽象層,抽象層不變,利用實現(xiàn)層進行擴展;☆對可變性的封裝,將可變的元素封裝起來,防止改變擴散到整個應(yīng)用;☆注意控制封裝的粒度,不要將兩種可變性封裝到一起;☆繼承是用來封裝可變性的,一般的繼承層次不要超過兩層;☆策略模式是對開閉原則的很好詮釋,其他還有工廠模式、建造模式、橋接模式、門面模式、調(diào)停者模式、訪問者模式和迭代子模式等;☆對“將條件轉(zhuǎn)移語句改寫成多態(tài)性”的重構(gòu)行為應(yīng)當(dāng)遵循開閉原則,防止多態(tài)性污染;☆java下的單方法接口通常用來實現(xiàn)函數(shù)指針或者委托的功能;☆任何一棵繼承樹都要以抽象類為根,具體類不是用來繼承的,更不要從工具類繼承;☆抽象類要擁有盡可能多的共同代碼,同時擁有盡可能少的數(shù)據(jù)?!町?dāng)Coad條件全部滿足時,才應(yīng)當(dāng)考慮使用繼承:派生類是基類的一個特殊種類,而不是其的一個角色,也就是說要區(qū)分“Has-a”和“Is-a”;永遠不會出現(xiàn)需要將派生類換成另外一個類的派生類的情況;派生類具有擴展基類的責(zé)任而不是具有置換或注銷基類的責(zé)任;只有在分類學(xué)角度上有意義時,才可以使用繼承。三、 里氏代換原則LSP任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。即超類存在的地方,子類是可以替換的。替換后行為不變,結(jié)果會變化。調(diào)用子類行為。子類和父類必須有相同行為才能完全地實現(xiàn)替換。實現(xiàn)開閉原則的關(guān)鍵是抽象化,而里氏代換原則中的基類和子類的繼承關(guān)系正是抽象化的具體體現(xiàn),所以里氏代換原則是對實現(xiàn)抽象化的具體步驟的規(guī)范。違反里氏代換原則一個最經(jīng)典的例子便是把正方形設(shè)計成長方形的子類。四、 依賴倒轉(zhuǎn)原則DIP要依賴于抽象,不要依賴于實現(xiàn)。說的白一點就是要依賴于抽象類和接口不要依賴具體類,具體類也就是我們可以用new關(guān)鍵字實例化的類。依賴倒轉(zhuǎn)原則是實現(xiàn)開閉原則的一個手段。五、 合成/聚合復(fù)用原則:要盡量使用合成/聚合達到復(fù)用,而不是繼承關(guān)系達到復(fù)用的目的。就如我們前面說的,如果為了復(fù)用,便使用繼承的方式將兩個不相干的類聯(lián)系在一起,這樣的方式是違反合成/聚合復(fù)用原則的,更進一步的后果那便是違反里氏代換原則。合成/聚合復(fù)用和里氏代換原則相輔相成,合成/聚合復(fù)用原則要求我們在復(fù)用時首先考慮合成/聚合關(guān)系,而里氏代換原則是要求我們在使用繼承時,必須滿足一定的條件。什么是合成?合成:是指一個整體對依托他而存在的關(guān)系,例如:一個人對他的房子和家具,其中他的房子和家具是不能被共享的,因為那些東西都是他自己的..并且人沒了,這個也關(guān)系就沒了..這個例子就好像,烏雞百鳳丸這個產(chǎn)品,它是有烏雞和上等藥材合成而來的一樣..也比如網(wǎng)絡(luò)游戲中的武器裝備合成一樣,多種東西合并為一種超強的東西一樣..什么是聚合?聚合:聚合是比合成關(guān)系的一種更強的依賴關(guān)系,聚合是一個整體對個體的部分,例如,一個奔馳S360汽車,對奔馳S360引擎,奔馳S360輪胎的關(guān)系..這些關(guān)系就是帶有聚合性質(zhì)的..因為奔馳S360引擎和奔馳S360輪胎他們只能被奔馳S360汽車所用,離開了奔馳S360汽車,它們就失去了存在的意義..在我們的設(shè)計中,這樣的關(guān)系不應(yīng)該頻繁出現(xiàn)..這樣會增大設(shè)計的耦合度..原則:一個類中有另一個類的對象。六、 接口隔離原則ISP應(yīng)當(dāng)為客戶端提供盡可能小的單獨接口,而不要提供大的總接口。暴露行為讓后面的實現(xiàn)類知道的越少越好。七、 迪米特法則:(體現(xiàn)松偶合)又叫最少知識原則,一個對象對另一個對象知道的越少越好,即一個軟件實體應(yīng)當(dāng)盡可能少的與其他實體發(fā)生相互作用。八、 單一職責(zé)原則SRP:(體現(xiàn)高內(nèi)聚)每一個類應(yīng)該專注于做一件事情。九、 繼承復(fù)用優(yōu)點:1、 新的實現(xiàn)較為容易,因為超類的大部分功能可以通過繼承關(guān)系自動進入子類。2、 修改或擴展繼承而來的實現(xiàn)比較容易。十、繼承復(fù)用的缺點:1、 繼承復(fù)用破壞包裝,將超類的實現(xiàn)細節(jié)暴露給子類,超類的內(nèi)部細節(jié)常常對子類是透明的,白箱復(fù)用。簡單,但不安全,不能在程序運行中隨便改變。2、 超類的實現(xiàn)發(fā)生了改變,子類的實現(xiàn)也不得不改變。3、超類繼承而來的是靜態(tài)的,不可能在運行時間內(nèi)發(fā)生改變,因此沒有足夠的靈活性。十^一、一個重構(gòu)方法的討論“將條件轉(zhuǎn)移語句改寫成為多態(tài)性”是一條廣為流傳的代碼重構(gòu)做法。這一做法本身并不能保證“開-閉”原則,應(yīng)當(dāng)以“開-閉”原則判斷是否需要改寫成多態(tài)。條件轉(zhuǎn)移并不是錯誤,如果需要,完全可以選擇使用條件轉(zhuǎn)移。如果一個條件轉(zhuǎn)移語句確實封裝了某種商務(wù)邏輯的可變性,那么將此種可變性封裝起來就符合“開-閉”原則設(shè)計思想了。如果一個條件轉(zhuǎn)移語句沒有涉及重要的商務(wù)邏輯,或者不會隨著時間的變化而變化,也不意味著任何的可擴展性,那么它就沒有涉及任何有意義的可變性。這時候?qū)⑦@個條件轉(zhuǎn)移語句改寫成多態(tài)性就是一種沒有意義的浪費。抽象類應(yīng)當(dāng)擁有盡可能多的共同代碼在一個繼承的等級結(jié)構(gòu)中,共同的代碼應(yīng)當(dāng)盡量向等級結(jié)構(gòu)的上方移動。把重復(fù)的代碼從子類里面移動到超類里面,可以提高代碼的復(fù)用率。在代碼發(fā)生改變時,設(shè)計師之需要修改一個地方。抽象類應(yīng)當(dāng)擁有盡可能少的數(shù)據(jù)與代碼的移動方向相反,數(shù)據(jù)的移動方向是從抽象類到具體類,向等級結(jié)構(gòu)的下方移動。一個對象的數(shù)據(jù)不論是否使用都會占用資源,所以應(yīng)當(dāng)放到等級結(jié)構(gòu)的低端。十二、什么時候才應(yīng)當(dāng)使用繼承復(fù)用.子類是超類的一個特殊種類,而不是超類的一個角色,Is-A才符合繼承關(guān)系。.永遠不會出現(xiàn)需要將子類換成另一個類的子類的情況。.子類具有擴展超類的責(zé)任,而不是具有置換掉(Override)和注銷掉(Nullify)超類的責(zé)任。.只有在分類學(xué)角度上有意義時,才可以使用繼承,不要從工具類繼承。卜三、使用接口與抽象類的優(yōu)缺點十三、使用接口與抽象類的優(yōu)缺點1、 抽象類可以提供某些方法的部分實現(xiàn),而接口不可以有具體實現(xiàn)。換言之對于抽象類而言可向一個抽象類中隨意的增加一個新的具體方法,其子類型都可以得到該具體方法,而對于接口則做不到這一點。如果向一個接口加入一個新的方法的話,所有實現(xiàn)這個接口的子類將無法通過編譯,因為他們沒有實現(xiàn)這個新聲明的方法。2、 一個抽象類只能由它的子類來實現(xiàn),這樣其子類就不能再繼承其他的父類了。而對于Java接口而言,任何一個實現(xiàn)了一個Java接口的類都可以具有這個接口的類型,而一個類可以實現(xiàn)任意多個接口。3、 從代碼重構(gòu)的角度來看
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年04月廣東廣州市黃埔街社區(qū)衛(wèi)生服務(wù)中心招聘編外聘用人員1人筆試歷年專業(yè)考點(難、易錯點)附帶答案詳解
- 2025年05月浙江湖州長興縣婦幼保健院招聘編外工作人員2人筆試歷年專業(yè)考點(難、易錯點)附帶答案詳解
- 2025 二年級語文下冊童話賞析教學(xué)課件
- 2025至2030中國氧化鋁木砂紙行業(yè)市場占有率及投資前景評估規(guī)劃報告
- 2025至2030中國杏仁露行業(yè)競爭狀況與銷售趨勢研究報告
- 2025至2030中國有機農(nóng)業(yè)行業(yè)市場發(fā)展分析及主要企業(yè)與投資機會報告
- 2025至2030中國智能家居水控制器行業(yè)市場占有率及投資前景評估規(guī)劃報告
- 體育旅游市場消費者權(quán)益保護與監(jiān)管機制探討考核試卷
- 照相館買一送一活動方案
- 燃氣應(yīng)急救援隊活動方案
- 職業(yè)技能培訓(xùn):保健按摩師
- 閱讀療法創(chuàng)新發(fā)展
- 第二十章手術(shù)減肥及體形塑造美容手術(shù)美容外科學(xué)概論講解
- 2024年消防文員理論考試題庫(濃縮400題)
- 山東省煙臺市招遠市(五四學(xué)制)2024-2025學(xué)年八年級上學(xué)期期末考試物理試卷(含答案)
- 2024年05月陜西秦農(nóng)農(nóng)村商業(yè)銀行股份有限公司2024年招考金融科技勞務(wù)派遣人員筆試歷年參考題庫附帶答案詳解
- 工程施工質(zhì)量檢驗試驗計劃
- 物業(yè)管理委托合同變更協(xié)議
- 產(chǎn)品痛點及解決方案
- 防災(zāi)減災(zāi)培訓(xùn)(安全行業(yè)講座培訓(xùn)課件)
- 電力安全知識相關(guān)內(nèi)容培訓(xùn)
評論
0/150
提交評論