下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
☆面向?qū)ο蟮钠叽笤瓌t:、☆面向?qū)ο蟮钠叽笤瓌t:1) 開(kāi)閉原則;------面向擴(kuò)展開(kāi)放,面向修改關(guān)閉。2) 里氏轉(zhuǎn)換原則;------超類(lèi)存在的地方,子類(lèi)是可以替換的。3) 依賴(lài)倒轉(zhuǎn)原則;------實(shí)現(xiàn)盡量依賴(lài)抽象,不依賴(lài)具體實(shí)現(xiàn)。4) 接口隔離原則;------應(yīng)當(dāng)為客戶(hù)端提供盡可能小的單獨(dú)的接口,而不是提供大的總的接口。5) 組合/聚合復(fù)用原則;------盡量使用合成/聚合達(dá)到復(fù)用,盡量少用繼承。原則:一個(gè)類(lèi)中有另一個(gè)類(lèi)的對(duì)象。6) “迪米特”法則;------又叫最少知識(shí)原則,一個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少的與其他實(shí)體發(fā)生相互作用。7) 單一職責(zé)原則。-----每一個(gè)類(lèi)應(yīng)該專(zhuān)注于做一件事情。二、 開(kāi)閉原則OCP:開(kāi)閉原則是設(shè)計(jì)原則基礎(chǔ)的基礎(chǔ),是java面向?qū)ο蟮暮诵脑瓌t,其它原則均圍繞開(kāi)閉原則進(jìn)行展開(kāi)。開(kāi)閉原則指的是一個(gè)軟件實(shí)體應(yīng)對(duì)對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉(Softwareentitiesshouldbeopenforextension,butclosedformodification)。這個(gè)原則是說(shuō)在設(shè)計(jì)一個(gè)模塊的時(shí)候,應(yīng)對(duì)使這個(gè)模塊可以在不被修改的前提下被擴(kuò)展,換言之,應(yīng)對(duì)可以不必修改源代碼的情況下改變這個(gè)模塊的行為?!顫M足開(kāi)閉原則的軟件系統(tǒng)的優(yōu)越性:通過(guò)擴(kuò)展已有的軟件系統(tǒng),可以提供新的行為,以滿足對(duì)軟件的新需求,使變化中的軟件系統(tǒng)有一定的適應(yīng)性和靈活性。已有的軟件模塊,特別是最重要的抽象層模塊不能再修改,這就使變化中的軟件系統(tǒng)有一定的穩(wěn)定性和延續(xù)性?!顚?shí)現(xiàn)開(kāi)閉原則的關(guān)鍵抽象化是解決問(wèn)題的關(guān)鍵,在面向?qū)ο蟮木幊陶Z(yǔ)言里,可以給系統(tǒng)定義出一套相對(duì)較為固定的抽象設(shè)計(jì),此設(shè)計(jì)允許無(wú)窮無(wú)盡的行為在實(shí)現(xiàn)層被實(shí)現(xiàn)。在語(yǔ)言里,可以給出一個(gè)或多個(gè)抽象類(lèi)或者接口,規(guī)定出所有的具體類(lèi)必須提供的方法的特征作為系統(tǒng)設(shè)計(jì)的抽象層。這個(gè)抽象層預(yù)見(jiàn)了所有的可擴(kuò)展性,因此,在任何擴(kuò)展情況下都不會(huì)改變。這就使得系統(tǒng)的抽象不需要修改,從而滿足了開(kāi)閉原則的第二條,對(duì)修改關(guān)閉。同時(shí),由于從抽象層導(dǎo)出一個(gè)或多個(gè)新的具體類(lèi)可以改變系統(tǒng)的行為,因此系統(tǒng)的設(shè)計(jì)對(duì)擴(kuò)展是開(kāi)放的,這就滿足了開(kāi)閉原則的第一條。☆對(duì)可變性的封裝原則把變化的東西封裝起來(lái),把不變的抽象出來(lái)。這是對(duì)開(kāi)閉原則的另外一種描述,它講的是找到一個(gè)系統(tǒng)的可變因素,將之封裝起來(lái)。該原則意味著兩點(diǎn):一種可變性不應(yīng)當(dāng)散落在代碼的很多角落,而應(yīng)當(dāng)封裝到一個(gè)對(duì)象里面。繼承應(yīng)當(dāng)被看做是封裝變化的方法,而不應(yīng)該被認(rèn)為是一種從一般對(duì)象生成特殊對(duì)象的方法。一種可變性不應(yīng)當(dāng)與另外一種可變性混合在一起。這意味著一般的繼承層次不會(huì)超過(guò)兩層。關(guān)鍵知識(shí)點(diǎn):☆開(kāi)閉原則的概念,軟件實(shí)體對(duì)擴(kuò)展開(kāi)發(fā),對(duì)修改關(guān)閉;☆實(shí)現(xiàn)開(kāi)閉原則的關(guān)鍵,利用接口或抽象類(lèi)抽象出系統(tǒng)的抽象層,抽象層不變,利用實(shí)現(xiàn)層進(jìn)行擴(kuò)展;☆對(duì)可變性的封裝,將可變的元素封裝起來(lái),防止改變擴(kuò)散到整個(gè)應(yīng)用;☆注意控制封裝的粒度,不要將兩種可變性封裝到一起;☆繼承是用來(lái)封裝可變性的,一般的繼承層次不要超過(guò)兩層;☆策略模式是對(duì)開(kāi)閉原則的很好詮釋?zhuān)渌€有工廠模式、建造模式、橋接模式、門(mén)面模式、調(diào)停者模式、訪問(wèn)者模式和迭代子模式等;☆對(duì)“將條件轉(zhuǎn)移語(yǔ)句改寫(xiě)成多態(tài)性”的重構(gòu)行為應(yīng)當(dāng)遵循開(kāi)閉原則,防止多態(tài)性污染;☆java下的單方法接口通常用來(lái)實(shí)現(xiàn)函數(shù)指針或者委托的功能;☆任何一棵繼承樹(shù)都要以抽象類(lèi)為根,具體類(lèi)不是用來(lái)繼承的,更不要從工具類(lèi)繼承;☆抽象類(lèi)要擁有盡可能多的共同代碼,同時(shí)擁有盡可能少的數(shù)據(jù)?!町?dāng)Coad條件全部滿足時(shí),才應(yīng)當(dāng)考慮使用繼承:派生類(lèi)是基類(lèi)的一個(gè)特殊種類(lèi),而不是其的一個(gè)角色,也就是說(shuō)要區(qū)分“Has-a”和“Is-a”;永遠(yuǎn)不會(huì)出現(xiàn)需要將派生類(lèi)換成另外一個(gè)類(lèi)的派生類(lèi)的情況;派生類(lèi)具有擴(kuò)展基類(lèi)的責(zé)任而不是具有置換或注銷(xiāo)基類(lèi)的責(zé)任;只有在分類(lèi)學(xué)角度上有意義時(shí),才可以使用繼承。三、 里氏代換原則LSP任何基類(lèi)可以出現(xiàn)的地方,子類(lèi)一定可以出現(xiàn)。即超類(lèi)存在的地方,子類(lèi)是可以替換的。替換后行為不變,結(jié)果會(huì)變化。調(diào)用子類(lèi)行為。子類(lèi)和父類(lèi)必須有相同行為才能完全地實(shí)現(xiàn)替換。實(shí)現(xiàn)開(kāi)閉原則的關(guān)鍵是抽象化,而里氏代換原則中的基類(lèi)和子類(lèi)的繼承關(guān)系正是抽象化的具體體現(xiàn),所以里氏代換原則是對(duì)實(shí)現(xiàn)抽象化的具體步驟的規(guī)范。違反里氏代換原則一個(gè)最經(jīng)典的例子便是把正方形設(shè)計(jì)成長(zhǎng)方形的子類(lèi)。四、 依賴(lài)倒轉(zhuǎn)原則DIP要依賴(lài)于抽象,不要依賴(lài)于實(shí)現(xiàn)。說(shuō)的白一點(diǎn)就是要依賴(lài)于抽象類(lèi)和接口不要依賴(lài)具體類(lèi),具體類(lèi)也就是我們可以用new關(guān)鍵字實(shí)例化的類(lèi)。依賴(lài)倒轉(zhuǎn)原則是實(shí)現(xiàn)開(kāi)閉原則的一個(gè)手段。五、 合成/聚合復(fù)用原則:要盡量使用合成/聚合達(dá)到復(fù)用,而不是繼承關(guān)系達(dá)到復(fù)用的目的。就如我們前面說(shuō)的,如果為了復(fù)用,便使用繼承的方式將兩個(gè)不相干的類(lèi)聯(lián)系在一起,這樣的方式是違反合成/聚合復(fù)用原則的,更進(jìn)一步的后果那便是違反里氏代換原則。合成/聚合復(fù)用和里氏代換原則相輔相成,合成/聚合復(fù)用原則要求我們?cè)趶?fù)用時(shí)首先考慮合成/聚合關(guān)系,而里氏代換原則是要求我們?cè)谑褂美^承時(shí),必須滿足一定的條件。什么是合成?合成:是指一個(gè)整體對(duì)依托他而存在的關(guān)系,例如:一個(gè)人對(duì)他的房子和家具,其中他的房子和家具是不能被共享的,因?yàn)槟切〇|西都是他自己的..并且人沒(méi)了,這個(gè)也關(guān)系就沒(méi)了..這個(gè)例子就好像,烏雞百鳳丸這個(gè)產(chǎn)品,它是有烏雞和上等藥材合成而來(lái)的一樣..也比如網(wǎng)絡(luò)游戲中的武器裝備合成一樣,多種東西合并為一種超強(qiáng)的東西一樣..什么是聚合?聚合:聚合是比合成關(guān)系的一種更強(qiáng)的依賴(lài)關(guān)系,聚合是一個(gè)整體對(duì)個(gè)體的部分,例如,一個(gè)奔馳S360汽車(chē),對(duì)奔馳S360引擎,奔馳S360輪胎的關(guān)系..這些關(guān)系就是帶有聚合性質(zhì)的..因?yàn)楸捡YS360引擎和奔馳S360輪胎他們只能被奔馳S360汽車(chē)所用,離開(kāi)了奔馳S360汽車(chē),它們就失去了存在的意義..在我們的設(shè)計(jì)中,這樣的關(guān)系不應(yīng)該頻繁出現(xiàn)..這樣會(huì)增大設(shè)計(jì)的耦合度..原則:一個(gè)類(lèi)中有另一個(gè)類(lèi)的對(duì)象。六、 接口隔離原則ISP應(yīng)當(dāng)為客戶(hù)端提供盡可能小的單獨(dú)接口,而不要提供大的總接口。暴露行為讓后面的實(shí)現(xiàn)類(lèi)知道的越少越好。七、 迪米特法則:(體現(xiàn)松偶合)又叫最少知識(shí)原則,一個(gè)對(duì)象對(duì)另一個(gè)對(duì)象知道的越少越好,即一個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少的與其他實(shí)體發(fā)生相互作用。八、 單一職責(zé)原則SRP:(體現(xiàn)高內(nèi)聚)每一個(gè)類(lèi)應(yīng)該專(zhuān)注于做一件事情。九、 繼承復(fù)用優(yōu)點(diǎn):1、 新的實(shí)現(xiàn)較為容易,因?yàn)槌?lèi)的大部分功能可以通過(guò)繼承關(guān)系自動(dòng)進(jìn)入子類(lèi)。2、 修改或擴(kuò)展繼承而來(lái)的實(shí)現(xiàn)比較容易。十、繼承復(fù)用的缺點(diǎn):1、 繼承復(fù)用破壞包裝,將超類(lèi)的實(shí)現(xiàn)細(xì)節(jié)暴露給子類(lèi),超類(lèi)的內(nèi)部細(xì)節(jié)常常對(duì)子類(lèi)是透明的,白箱復(fù)用。簡(jiǎn)單,但不安全,不能在程序運(yùn)行中隨便改變。2、 超類(lèi)的實(shí)現(xiàn)發(fā)生了改變,子類(lèi)的實(shí)現(xiàn)也不得不改變。3、超類(lèi)繼承而來(lái)的是靜態(tài)的,不可能在運(yùn)行時(shí)間內(nèi)發(fā)生改變,因此沒(méi)有足夠的靈活性。十^一、一個(gè)重構(gòu)方法的討論“將條件轉(zhuǎn)移語(yǔ)句改寫(xiě)成為多態(tài)性”是一條廣為流傳的代碼重構(gòu)做法。這一做法本身并不能保證“開(kāi)-閉”原則,應(yīng)當(dāng)以“開(kāi)-閉”原則判斷是否需要改寫(xiě)成多態(tài)。條件轉(zhuǎn)移并不是錯(cuò)誤,如果需要,完全可以選擇使用條件轉(zhuǎn)移。如果一個(gè)條件轉(zhuǎn)移語(yǔ)句確實(shí)封裝了某種商務(wù)邏輯的可變性,那么將此種可變性封裝起來(lái)就符合“開(kāi)-閉”原則設(shè)計(jì)思想了。如果一個(gè)條件轉(zhuǎn)移語(yǔ)句沒(méi)有涉及重要的商務(wù)邏輯,或者不會(huì)隨著時(shí)間的變化而變化,也不意味著任何的可擴(kuò)展性,那么它就沒(méi)有涉及任何有意義的可變性。這時(shí)候?qū)⑦@個(gè)條件轉(zhuǎn)移語(yǔ)句改寫(xiě)成多態(tài)性就是一種沒(méi)有意義的浪費(fèi)。抽象類(lèi)應(yīng)當(dāng)擁有盡可能多的共同代碼在一個(gè)繼承的等級(jí)結(jié)構(gòu)中,共同的代碼應(yīng)當(dāng)盡量向等級(jí)結(jié)構(gòu)的上方移動(dòng)。把重復(fù)的代碼從子類(lèi)里面移動(dòng)到超類(lèi)里面,可以提高代碼的復(fù)用率。在代碼發(fā)生改變時(shí),設(shè)計(jì)師之需要修改一個(gè)地方。抽象類(lèi)應(yīng)當(dāng)擁有盡可能少的數(shù)據(jù)與代碼的移動(dòng)方向相反,數(shù)據(jù)的移動(dòng)方向是從抽象類(lèi)到具體類(lèi),向等級(jí)結(jié)構(gòu)的下方移動(dòng)。一個(gè)對(duì)象的數(shù)據(jù)不論是否使用都會(huì)占用資源,所以應(yīng)當(dāng)放到等級(jí)結(jié)構(gòu)的低端。十二、什么時(shí)候才應(yīng)當(dāng)使用繼承復(fù)用.子類(lèi)是超類(lèi)的一個(gè)特殊種類(lèi),而不是超類(lèi)的一個(gè)角色,Is-A才符合繼承關(guān)系。.永遠(yuǎn)不會(huì)出現(xiàn)需要將子類(lèi)換成另一個(gè)類(lèi)的子類(lèi)的情況。.子類(lèi)具有擴(kuò)展超類(lèi)的責(zé)任,而不是具有置換掉(Override)和注銷(xiāo)掉(Nullify)超類(lèi)的責(zé)任。.只有在分類(lèi)學(xué)角度上有意義時(shí),才可以使用繼承,不要從工具類(lèi)繼承。卜三、使用接口與抽象類(lèi)的優(yōu)缺點(diǎn)十三、使用接口與抽象類(lèi)的優(yōu)缺點(diǎn)1、 抽象類(lèi)可以提供某些方法的部分實(shí)現(xiàn),而接口不可以有具體實(shí)現(xiàn)。換言之對(duì)于抽象類(lèi)而言可向一個(gè)抽象類(lèi)中隨意的增加一個(gè)新的具體方法,其子類(lèi)型都可以得到該具體方法,而對(duì)于接口則做不到這一點(diǎn)。如果向一個(gè)接口加入一個(gè)新的方法的話,所有實(shí)現(xiàn)這個(gè)接口的子類(lèi)將無(wú)法通過(guò)編譯,因?yàn)樗麄儧](méi)有實(shí)現(xiàn)這個(gè)新聲明的方法。2、 一個(gè)抽象類(lèi)只能由它的子類(lèi)來(lái)實(shí)現(xiàn),這樣其子類(lèi)就不能再繼承其他的父類(lèi)了。而對(duì)于Java接口而言,任何一個(gè)實(shí)現(xiàn)了一個(gè)Java接口的類(lèi)都可以具有這個(gè)接口的類(lèi)型,而一個(gè)類(lèi)可以實(shí)現(xiàn)任意多個(gè)接口。3、 從代碼重構(gòu)的角度來(lái)看
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年混凝土工程物流與運(yùn)輸服務(wù)合同
- 2025江蘇店鋪?zhàn)赓U版合同
- 2025年通遼貨運(yùn)從業(yè)資格仿真考題
- 2024年度北京教育培訓(xùn)合作協(xié)議2篇
- 2025主材采購(gòu)合同
- 融資租賃公司租賃合同
- 2024年商鋪?zhàn)赓U合同模板下載合同條款詳細(xì)說(shuō)明9篇
- 2024年度人力資源經(jīng)理試用期合同范本(企業(yè)創(chuàng)新)5篇
- 城市排水系統(tǒng)土石方施工協(xié)議
- 2024區(qū)網(wǎng)紅景點(diǎn)民宿租賃合同3篇
- 偏微分方程知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋浙江師范大學(xué)
- 2024年共青團(tuán)入團(tuán)考試測(cè)試題庫(kù)及答案
- 2022年全國(guó)應(yīng)急普法知識(shí)競(jìng)賽試題庫(kù)大全-下(判斷題庫(kù)-共4部分-2)
- 花鍵計(jì)算公式DIN5480
- 《建筑與市政工程施工現(xiàn)場(chǎng)臨時(shí)用電安全技術(shù)標(biāo)準(zhǔn)》JGJT46-2024知識(shí)培訓(xùn)
- 2024年事業(yè)單位招聘考試公共基礎(chǔ)知識(shí)模擬試卷及答案(共七套)
- 《燃?xì)獍踩R(shí)培訓(xùn)》課件
- 高考及人生規(guī)劃講座模板
- 浙教版2023小學(xué)信息技術(shù)五年級(jí)上冊(cè) 第6課《順序結(jié)構(gòu)》說(shuō)課稿及反思
- 第20課《人民英雄永垂不朽》課件+2024-2025學(xué)年統(tǒng)編版語(yǔ)文八年級(jí)上冊(cè)
- 智能語(yǔ)音應(yīng)用開(kāi)發(fā)及服務(wù)合同
評(píng)論
0/150
提交評(píng)論