03-設(shè)計(jì)模式教學(xué)課件_第1頁
03-設(shè)計(jì)模式教學(xué)課件_第2頁
03-設(shè)計(jì)模式教學(xué)課件_第3頁
03-設(shè)計(jì)模式教學(xué)課件_第4頁
03-設(shè)計(jì)模式教學(xué)課件_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

常見面對對象設(shè)計(jì)原則引言設(shè)計(jì)原則是思想上的指導(dǎo)設(shè)計(jì)模式是實(shí)現(xiàn)上的手段設(shè)計(jì)模式是設(shè)計(jì)原則的具體表達(dá)在實(shí)際開發(fā)中,很少做到完全遵守,總是在有意無意的違反一些或者局部原則設(shè)計(jì)是一種危急的平衡藝術(shù)單一職責(zé)原則(SRP)

SingleResponsibilityPrinciple拍攝UFO單一職責(zé)原則就一個(gè)類而言,應(yīng)當(dāng)僅有一個(gè)引起它變化的緣由〔職責(zé)〕。假設(shè)一個(gè)類擔(dān)當(dāng)?shù)穆氊?zé)過多,就等于把這些職責(zé)耦合在一起,一個(gè)職責(zé)的變化可能會減弱或者抑制這個(gè)類完成其他職責(zé)的力氣。這種耦合會導(dǎo)致脆弱的設(shè)計(jì),當(dāng)變化發(fā)生時(shí),設(shè)計(jì)會患病到意想不到的破壞難點(diǎn)在于如何區(qū)分職責(zé)、職責(zé)的粒度問題軟件設(shè)計(jì)真剛要做的內(nèi)容,就是覺察職責(zé)并把那些職責(zé)相互分別。假設(shè)你能夠想到多于一個(gè)的動機(jī)去轉(zhuǎn)變一個(gè)類,那么這個(gè)類就具有多于一個(gè)的職責(zé),就應(yīng)當(dāng)考慮類的職責(zé)分別。開放-封閉原則〔OCP原則〕

Open-ClosedPrinciple開放-封閉原則Open-ClosedPrinciple原則講的是:一個(gè)軟件實(shí)體應(yīng)當(dāng)對擴(kuò)開放放,對修改關(guān)閉。需要考慮:怎樣的設(shè)計(jì)才能面對需求的轉(zhuǎn)變卻可以保持相對穩(wěn)定,從而使得系統(tǒng)可以在第一個(gè)版本以后不斷推出新的版本。面對需求,對程序的改動是通過增加新的代碼進(jìn)展的,而不是更改現(xiàn)有代碼。例如第一章程序關(guān)鍵合理地抽象、分別出變化與不變化的局部,為變化的局部預(yù)留下可擴(kuò)展的方式。例如:鉤子方法或是動態(tài)組合對象等要完全遵守開閉原則是不行能的,也沒這個(gè)必要。適當(dāng)?shù)某橄罂梢蕴岣呦到y(tǒng)的靈敏性、使其可擴(kuò)展、可維護(hù);過度抽象,會大大增加系統(tǒng)的簡潔程度。例子:招安招安之法的關(guān)鍵便是不允許更改現(xiàn)有的秩序,但允許將被招安者納入現(xiàn)有秩序中,從而擴(kuò)展了這一秩序。用面對對象的語言來講,不允許更改的是系統(tǒng)的抽象層,而允許更改的是系統(tǒng)的實(shí)現(xiàn)層。里氏代換原則

LiskovSubstitutionPrinciple使得開放-封閉成為可能里氏代換原則里氏代換原則子類型(subtype)必需能夠替換它們的基〔父〕類型?!沧宇惪梢砸愿割惖纳矸菹拧臣僭O(shè)鳥是會飛的,企鵝不會飛,企鵝是鳥嗎???由于子類型的可替換性才使得使用父類型的模塊在無需修改的狀況下就可以擴(kuò)展。因此是實(shí)現(xiàn)開閉原則的前提之一依靠倒轉(zhuǎn)〔置〕原則(DIP)

DependenceInversionPrinciple依靠倒轉(zhuǎn)原則依靠倒轉(zhuǎn)〔置〕〔DependenceInversionPrinciple〕原則講的是:要依靠于抽象,不要依靠于具體。簡潔的說,依靠倒轉(zhuǎn)原則要求客戶端依靠于抽象耦合。原則表述:抽象不應(yīng)當(dāng)依靠于具體實(shí)現(xiàn);具體實(shí)現(xiàn)應(yīng)當(dāng)依靠于抽象;高層模塊不應(yīng)當(dāng)依靠于底層模塊,二者都應(yīng)當(dāng)依靠于抽象要針對接口編程,不針對實(shí)現(xiàn)編程。修電腦得到的啟發(fā)強(qiáng)內(nèi)聚、松耦合由于PC易插撥的方式,那么不管哪一個(gè)出問題,都可以在不影響別的部件的前題下進(jìn)展修改或替換?!币揽康罐D(zhuǎn)原則要針對接口編程,不要對實(shí)現(xiàn)編程,無論主板、CPU、內(nèi)存、硬盤都是在針對接口編程,假設(shè)針對實(shí)現(xiàn)編程,那就會消逝換內(nèi)存需要把主板也換了的犯難常見錯(cuò)誤層次化調(diào)用的時(shí)候,應(yīng)當(dāng)是高層調(diào)用“底層所擁有的接口”,這是一典型的誤會。一般高層包含對業(yè)務(wù)功能的處理和業(yè)務(wù)策略選擇,應(yīng)當(dāng)被重用,是高層模塊去影響底層的具體實(shí)現(xiàn)。這個(gè)底層的接口應(yīng)當(dāng)是由高層提出的,然后由底層實(shí)現(xiàn),即底層的接口的全部權(quán)在高層模塊,是一種全部權(quán)的倒置反面例子缺點(diǎn):耦合太嚴(yán)密,Light發(fā)生變化將影響ToggleSwitch。解決方法一:將Light作成Abstract,然后具體類繼承自Light。優(yōu)點(diǎn):ToggleSwitch依靠于抽象類Light,具有更高的穩(wěn)定性,而BulbLight與TubeLight繼承自Light,可以依據(jù)“開放-封閉”原則進(jìn)展擴(kuò)展。只要Light不發(fā)生變化,BulbLight與TubeLight的變化就不會涉及ToggleSwitch。缺點(diǎn):假設(shè)用ToggleSwitch把握一臺電視就很困難了??偛荒茏孴V繼承自Light吧。解決方法二:優(yōu)點(diǎn):更為通用、更為穩(wěn)定。結(jié)論:使用傳統(tǒng)過程化程序設(shè)計(jì)所創(chuàng)立的依靠關(guān)系,策略依靠于細(xì)節(jié),這是糟糕的,由于策略受到細(xì)節(jié)轉(zhuǎn)變的影響。依靠倒置原則使細(xì)節(jié)和策略都依靠于抽象,抽象的穩(wěn)定性預(yù)備了系統(tǒng)的穩(wěn)定性。HollywoodPrinciple:don”tcallus,we”llcallyou合成/聚合復(fù)用原則要盡量使用合成/聚合,而不是繼承關(guān)系到達(dá)復(fù)用的目的。

合成/聚合原則就是在一個(gè)新的對象里面使用一些已有的對象,使之成為新對象的一局部;新的對象通過向這些對象的委派到達(dá)復(fù)用已有功能的目的。FavorCompositionOverInheritance接口隔離原則〔ISP〕接口隔離原則接口隔離原則〔InterfaceSegregationPrinciple〕講的是:使用多個(gè)特地的接口比使用單一的總接口要好。換而言之,從一個(gè)客戶類的角度來講:一個(gè)類對另外一個(gè)類的依靠性應(yīng)當(dāng)是建立在最小接口上的。過于臃腫的接口是對接口的污染。不應(yīng)當(dāng)強(qiáng)迫客戶依靠于它們不用的方法。實(shí)現(xiàn)方法:使用多重繼承分別接口

迪米特法則〔LoD〕迪米特法則〔LawofDemeter或簡寫LoD〕又叫最少學(xué)問原則〔LeastKnowledgePrinciple或簡寫為LKP〕假設(shè)兩個(gè)類不必彼此直接通信,那么這兩個(gè)類就不應(yīng)當(dāng)發(fā)生直接的相互作用。假設(shè)其中一個(gè)類需要調(diào)用另一個(gè)類的某一個(gè)方法的話,可以通過第三者轉(zhuǎn)發(fā)這個(gè)調(diào)用。也就是說,一個(gè)對象應(yīng)當(dāng)對其它對象有盡可能少的了解。其它表述只與你直接的朋友們通信不要跟“生疏人”說話每一個(gè)軟件單位對其它的單位都只有最少的學(xué)問,而且局限于那些與本單位親切相關(guān)的軟件單位。迪米特法則其根本思想,是強(qiáng)調(diào)了類之間的松耦合。類之間的耦合越弱,越有利于復(fù)用,一個(gè)處于弱耦合的類被修改,不會對有關(guān)系的類造成涉及。信息的隱蔽促進(jìn)了軟件的復(fù)用。以史為鑒使民無知

《老子》第三章曰:“是以圣人之治,虛其心,實(shí)其腹,弱其志,常使民無知無欲?!笔贡弧敖y(tǒng)治”的對象“愚昧”化,處于“無知”的狀態(tài),可以使“統(tǒng)治”的本錢降低。所謂“最少學(xué)問“原則,實(shí)際上便是老子的“使民無知“的統(tǒng)治之術(shù)。不相往來

《老子》云:“小國寡民……鄰國相望,雞犬之聲相聞,民至老死,不相往來?!睂⒈唤y(tǒng)治的對象隔離開來,使它們沒有直接的通信,可以到達(dá)分化瓦解,繼而分而治之的效果。迪米特法則與老子的“不相往來“的統(tǒng)治之術(shù)不謀而合。單一職責(zé)原則就一個(gè)類而言,應(yīng)當(dāng)僅有一個(gè)引起它變化的緣由。開放-封閉原則一個(gè)軟件實(shí)體應(yīng)當(dāng)對擴(kuò)開放放,對修改關(guā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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論