下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
面向?qū)ο笃叽笤O(shè)計(jì)原則1、 開閉原則2、 里氏替換原則3、 單一職責(zé)原則4、 接口隔離原則5、 依賴倒置原則6、 迪米特原則7、 組合/聚合復(fù)用原則知識點(diǎn)關(guān)聯(lián)學(xué)習(xí)面向?qū)ο蟮脑O(shè)計(jì)模式,是深入面向?qū)ο笏枷氲蔫€匙,通過大師級的微妙案例,我們可以開闊自己的認(rèn)知。在學(xué)習(xí)面向?qū)ο笤O(shè)計(jì)七大原則之前,我們要對基本的封裝、繼承、多態(tài)思想有足夠的了解,對抽象類和接口也要有足夠的編碼能力,因?yàn)樵O(shè)計(jì)模式是以上知識點(diǎn)的綜合應(yīng)用。另外,在接觸具體的設(shè)計(jì)模式之前,面向?qū)ο蟮钠叽笤O(shè)計(jì)原則會讓你知道,設(shè)計(jì)模式出現(xiàn)的必然性和意義所在。1、每一種設(shè)計(jì)思想的精準(zhǔn)含義,具體如下:先從整體認(rèn)識這七種設(shè)計(jì)思想。一、 開閉原則:這一條放在第一位來理解,它的含義是對擴(kuò)展開放,對修改關(guān)閉。解釋一下就是,我們寫完的代碼,不能因?yàn)樾枨笞兓托薷?。我們可以通過新增代碼的方式來解決變化的需求。當(dāng)然,這是一種理想的狀態(tài),在現(xiàn)實(shí)中,我們要盡量的縮小這種修改。再解釋一下這條原則的意義所在,我們采用逆向思維方式來想。如果每次需求變動都去修改原有的代碼,那原有的代碼就存在被修改錯誤的風(fēng)險(xiǎn),當(dāng)然這其中存在有意和無意的修改,都會導(dǎo)致原有正常運(yùn)行的功能失效的風(fēng)險(xiǎn),這樣很有可能會展開可怕的蝴蝶效應(yīng),使維護(hù)工作劇增。說到底,開閉原則除了表面上的可擴(kuò)展性強(qiáng)以外,在企業(yè)中更看重的是維護(hù)成本。所以,開閉原則是設(shè)計(jì)模式的第一大原則,它的潛臺詞是:控制需求變動風(fēng)險(xiǎn),縮小維護(hù)成本。以下幾種原則,都是為此原則服務(wù)的。二、 里氏替換選擇:此原則的含義是子類可以在任何地方替換它的父類。解釋一下,這是多態(tài)的前提,我們后面很多所謂的靈活,都是不改變聲明類型的情況下,改變實(shí)例化類來完成的需求變更。當(dāng)然,繼承的特性看似天然就滿足這個條件。但這里更注重的是繼承的應(yīng)用問題,我們必須保證我們的子類和父類劃分是精準(zhǔn)的。里氏替換原則的潛臺詞是:盡量使用精準(zhǔn)的抽象類或者接口。三、 單一職責(zé)原則:單一職責(zé)的含義是:類的職責(zé)單一,引起類變化的原因單一。解釋一下,這也是靈活的前提,如果我們把類拆分成最小的職能單位,那組合與復(fù)用就簡單的多了,如果一個類做的事情太多,在組合的時候,必然會產(chǎn)生不必要的方法出現(xiàn),這實(shí)際上是一種污染。舉個例子,我們在繪制圖案的時候,用“點(diǎn)”組成圖和用“直線”組成圖,哪個更靈活呢?一定是“點(diǎn)”,它可以繪制任何圖形,而直線只能繪制帶有直線條的圖案,它起碼無法畫圓。單一職責(zé)的潛臺詞是:拆分到最小單位,解決復(fù)用和組合問題。四、 接口隔離原則:接口隔離原則可以說是單一職責(zé)的必要手段,它的含義是盡量使用職能單一的接口,而不使用職能復(fù)雜、全面的接口。很好理解,接口是為了讓子類實(shí)現(xiàn)的,如果子類想達(dá)到職能單一,那么接口也必須滿足職能單一。相反,如果接口融合了多個不相關(guān)的方法,那它的子類就被迫要實(shí)現(xiàn)所有方法,盡管有些方法是根本用不到的。這就是接口污染。接口隔離原則的潛臺詞是:拆分,從接口開始。五、 依賴倒置原則:想要理解依賴倒置原則,必須先理解傳統(tǒng)的解決方案。面相對象的初期的程序,被調(diào)用者依賴于調(diào)用者。也就是調(diào)用者決定被調(diào)用者有什么方法,有什么樣的實(shí)現(xiàn)方式,這種結(jié)構(gòu)在需求變更的時候,會付出很大的代價(jià),甚至推翻重寫。依賴倒置原則就是要求調(diào)用者和被調(diào)用者都依賴抽象,這樣兩者沒有直接的關(guān)聯(lián)和接觸,在變動的時候,一方的變動不會影響另一方的變動。其實(shí),依賴倒置和前面的原則是相輔相成的,都強(qiáng)調(diào)了抽象的重要性。依賴倒置的潛臺詞是:面向抽象編程,解耦調(diào)用和被調(diào)用者。六、 迪米特原則:迪米特原則要求盡量的封裝,盡量的獨(dú)立,盡量的使用低級別的訪問修飾符。這是封裝特性的典型體現(xiàn)。一個類如果暴露太多私用的方法和字段,會讓調(diào)用者很茫然。并且會給類造成不必要的判斷代碼。所以,我們使用盡量低的訪問修飾符,讓外界不知道我們的內(nèi)部。這也是面向?qū)ο蟮幕舅悸?。這是迪米特原則的一個特性,無法了解類更多的私有信息。另外,迪米特原則要求類之間的直接聯(lián)系盡量的少,兩個類的訪問,通過第三個中介類來實(shí)現(xiàn)。迪米特原則的潛臺詞是:不和陌生人說話,有事去中介。七、 組合/聚合復(fù)用原則:此原則的含義是,如果只是達(dá)到代碼復(fù)用的目的,盡量使用組合與聚合,而不是繼承。這里需要解釋一下,組合聚合只是引用其他的類的方法,而不會受引用的類的繼承而改變血統(tǒng)。繼承的耦合性更大,比如一個父類后來添加實(shí)現(xiàn)一個接口或者去掉一個接口,那子類可能會遭到毀滅性的編譯錯誤,但如果只是組合聚合,只是引用類的方法,就不會有這種巨大的風(fēng)險(xiǎn),同時也實(shí)現(xiàn)了復(fù)用。組合聚合復(fù)用原則的潛臺詞是:我只是用你的方法,我們不一定是同類。2、在學(xué)習(xí)面向?qū)ο笃叽笤O(shè)計(jì)原則時需要注意以下幾點(diǎn):a) 高內(nèi)聚、低耦合和單一職能的“沖突”實(shí)際上,這兩者是一回事。內(nèi)聚,要求一個類把所有相關(guān)的方法放在一起,初看是職能多,但有個“高”,就是要求把聯(lián)系非常緊密的功能放在一起,也就是說,從整體看,是一個職能的才能放在一起,所以,兩者是不同的表述而已。這里很多人理解成復(fù)合類,但復(fù)合類不是高內(nèi)聚,而是雜亂的放在一起,是一種設(shè)計(jì)失誤而已。b) 多個單一職能接口的靈活性和聲明類型問題如果一個類實(shí)現(xiàn)多個接口,那么這個類應(yīng)該用哪個接口類型聲明呢?應(yīng)該是用一個抽象類來繼承多個接口,而實(shí)現(xiàn)類來繼承這個接口。聲明的時候,類型是抽象類。c) 最少知識原則和中介類泛濫兩種極端情況這是另一種設(shè)計(jì)的失誤。迪米特原則要求類之間要用中介來通訊,但類多了以后,會造成中介類泛濫的情況,這種情況,我們可以考慮中介模式,用一個總的中介類來實(shí)現(xiàn)。當(dāng)然,設(shè)計(jì)模式都有自己的缺陷,迪米特原則也不是十全十美,交互類非常繁多的情況下,要適當(dāng)?shù)臓奚O(shè)計(jì)原則。d) 繼承和組合聚合復(fù)用原則的“沖突”繼承也能實(shí)現(xiàn)復(fù)用,那這個原則是不是要拋棄繼承了?不是的。繼承更注重的是“血統(tǒng)”,也就是什么類型的。而組合聚合更注重的是借用“技能”。并且,組合聚合中,兩個類是部分與整體的關(guān)系,組合聚合可以由多個類的技能組成。在C#和Java中只有單繼承。這個原則不是告訴我們不用繼承了,都用組合聚合,而是在“復(fù)用”這個點(diǎn)上,我們優(yōu)先使用組合聚合。面向?qū)ο笤O(shè)計(jì)原則的共性問題:1、 這么多設(shè)計(jì)模式,都要學(xué)習(xí)和使用么?答:我們只是掌握總體的原則,然后學(xué)習(xí)常用的就行了。實(shí)際開發(fā)中也不是每種設(shè)計(jì)模式都會經(jīng)常用到。因?yàn)闅w根結(jié)底,設(shè)計(jì)模式也好,架構(gòu)也好,都是為需求服務(wù)的,沒有需求業(yè)務(wù)模型,不能生搬硬套模式。我們在學(xué)習(xí)的時候,多學(xué)一些總是好的,但只是為了開闊自己的眼界。2、 設(shè)計(jì)模式是規(guī)范么?是不是好的程序必須用設(shè)計(jì)模式?答:嚴(yán)格來說,好的程序遵循的是設(shè)計(jì)原則,而非設(shè)計(jì)模式?,F(xiàn)在就出現(xiàn)很多新的演變出來的模
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 優(yōu)待證合作協(xié)議文本
- 2025版土地抵押權(quán)抵押權(quán)抵押權(quán)抵押資產(chǎn)證券化合同模板3篇
- 2025年度智能家居系統(tǒng)研發(fā)與裝修設(shè)計(jì)合同2篇
- 2025年全球及中國1-戊基-1H-吲哚行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國汽車雙面膠帶行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國流媒體音視頻產(chǎn)品行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球船底噴氣推進(jìn)系統(tǒng)行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國游戲設(shè)計(jì)服務(wù)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年度股權(quán)代持與風(fēng)險(xiǎn)控制協(xié)議書(個人股權(quán)轉(zhuǎn)讓與代持)4篇
- 2025年度大學(xué)學(xué)生心理健康服務(wù)合作協(xié)議
- 張家界喀斯特地貌
- 讓學(xué)生看見你的愛
- 12123交管學(xué)法減分練習(xí)題及答案二(帶圖文通用版)
- 銷售禮盒營銷方案
- 南潯至臨安公路(南潯至練市段)公路工程環(huán)境影響報(bào)告
- 《小英雄雨來》讀書分享會
- 初中數(shù)學(xué)校本教材(完整版)
- 重慶市銅梁區(qū)2024屆數(shù)學(xué)八上期末檢測試題含解析
- 中央導(dǎo)管相關(guān)血流感染防控
- 光的偏振和晶體光學(xué)基礎(chǔ)課件
- 中科大光學(xué)講義08光的偏振
評論
0/150
提交評論