1.“開——閉”原則:講的是,一個(gè)軟件應(yīng)當(dāng)對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。即,在設(shè)計(jì)一個(gè)模塊的時(shí)候,應(yīng)當(dāng)使這個(gè)模塊可以在不被修改的前提下被擴(kuò)展。換言之,應(yīng)當(dāng)可以在不必修改源代碼的情況下改變這個(gè)模塊的任務(wù)。
滿足“開——閉”原則的設(shè)計(jì)可以個(gè)一個(gè)軟件兩個(gè)優(yōu)越性:
1) 通過擴(kuò)展已有的軟件系統(tǒng),可以提供新的行為,以滿足對(duì)軟件新的需求,使變化中的軟件系統(tǒng)有一定的適應(yīng)性和靈活性。
2) 已有的軟件模塊,特別是最重要的抽象層模塊不能再修改,這就是使變化中的軟件系統(tǒng)有一定的穩(wěn)定性和延續(xù)性。
2.里氏代換原則:概念:一個(gè)軟件實(shí)體如果使用的是一個(gè)基類的話,那么一定使用其子類,而且它根本不能察覺出基類對(duì)象和子類對(duì)象的區(qū)別。
里氏代換原則是繼承復(fù)用的基石。只有當(dāng)子類可以替換掉基類,軟件的功能不會(huì)受到影響時(shí),基類才能夠在基類的基礎(chǔ)上增加新的行為。
反過來的代換不成立。
必須指出,反過來的代換則不成立,即如果一個(gè)軟件實(shí)例使用的是一個(gè)子類的話,那么它不一定使用基類。
3.接口隔離原則:概念:使用專門的接口比使用單一的接口好。從客戶類的角度來講,一個(gè)類對(duì)另一個(gè)類的依賴性應(yīng)當(dāng)是建立在最小接口上的。
“接口”理解為一個(gè)類所提供的所有方法的特征的集合,也就是一種邏輯上才存在的概念。
定制服務(wù)
接口隔離原則講的是為同一個(gè)角色提供寬、窄不同的接口,以應(yīng)對(duì)不同的客戶端要求。
接口污染
過于臃腫的接口是對(duì)接口的污染。
4.合成/聚合復(fù)用原則:概念:在一個(gè)新的對(duì)象里面使用一些已有的對(duì)象,使之成為新對(duì)象的一部分;新的對(duì)象通過向這些對(duì)象的委派達(dá)到復(fù)用已有功能的目的。
另一種表述為:要盡量使用合成/聚合關(guān)系,盡量不要使用繼承關(guān)系。
合成/聚合復(fù)用的好處
1) 新對(duì)象存取已有對(duì)象的唯一方法是通過已有對(duì)象的接口。
2) 這種復(fù)用是黑盒復(fù)用,因?yàn)橐延袑?duì)象內(nèi)部細(xì)節(jié)是新對(duì)象所看不見的。
3) 這種復(fù)用所需的依賴較少。
4) 每一個(gè)新的類可以將焦點(diǎn)集中在一個(gè)任務(wù)上。
5) 這種復(fù)用可以在運(yùn)行期間內(nèi)動(dòng)態(tài)進(jìn)行,新對(duì)象可以動(dòng)態(tài)地引用與已有對(duì)象類型相同的對(duì)象。
繼承復(fù)用的缺點(diǎn)
1)破壞了包裝,因?yàn)槔^承將超類的實(shí)現(xiàn)細(xì)節(jié)暴露給子類。由于超類的內(nèi)部細(xì)節(jié)常常是對(duì)子類透明的,所以又稱為白盒復(fù)用。
2)如果超類的實(shí)現(xiàn)發(fā)生改變,那么子類的實(shí)現(xiàn)也不得不發(fā)生改變。因此,當(dāng)一個(gè)基類發(fā)生改變時(shí),修改將擴(kuò)散到每一級(jí)子類,設(shè)計(jì)師將做大量的修改。
3)從繼承繼承而來的實(shí)現(xiàn)是靜態(tài)的,不可能在運(yùn)行時(shí)間內(nèi)發(fā)生改變,沒有足夠的靈活性。
5.依賴倒轉(zhuǎn)原則:概念:要依賴于抽象,不要以來于具體。
另一種表述為:要針對(duì)接口編程,不要針對(duì)實(shí)現(xiàn)編程。
只要一個(gè)被引用的對(duì)象存在抽象類型,就應(yīng)當(dāng)在任何引用該對(duì)象的地方使用抽象類型,包括參量的類型聲明,方法的返回類型的聲明,屬性變量的類型聲明等。
怎樣做到依賴倒轉(zhuǎn)原則
以抽象方式耦合是依賴倒轉(zhuǎn)原則的關(guān)鍵。由于一個(gè)抽象耦合關(guān)系總要涉及具體類從抽象類繼承,并且需要保證在任何引用到基類的地方都可以替成其子類,因此,里氏代換原則是依賴倒轉(zhuǎn)原則的基礎(chǔ)。
在抽象層次上的耦合雖然有靈活性,但也帶來了額外的復(fù)雜性。在某些情況下,如果一個(gè)具體類發(fā)生變化的可能性非常小,那么抽象耦合能發(fā)揮的好處便十分有限,這時(shí)使用具體耦合會(huì)更好。
6.迪米特法則:又叫做最少知識(shí)原則,就是說,一個(gè)對(duì)象應(yīng)當(dāng)對(duì)其他對(duì)象有盡可能少的了解。
迪米特法則的各種表述:
1) 只與你直接的朋友們通信
2) 不要跟“陌生人”說話
3) 每一個(gè)軟件單位對(duì)其他的單位都只有最少的知識(shí),而且局限于那些與本單位密切相關(guān)的軟件單位。
狹義的迪米特法則
如果兩個(gè)類不必彼此直接通信,那么這兩個(gè)類就不應(yīng)當(dāng)發(fā)生直接的相互作用。如果其中的一個(gè)類需要調(diào)用另一個(gè)類的某一個(gè)方法的話,可以通過第三者轉(zhuǎn)發(fā)這個(gè)調(diào)用。
狹義迪米特法則的缺點(diǎn)
遵循狹義的迪米特法則會(huì)產(chǎn)生一個(gè)明顯的缺點(diǎn):會(huì)在系統(tǒng)里造成大量的小方法,散落在系統(tǒng)的各個(gè)角落,這些方法僅僅是傳遞間接的調(diào)用,因此與系統(tǒng)的商務(wù)邏輯無關(guān)。
朋友的確定
1) 當(dāng)前對(duì)象本身(this)
2) 以參量形式傳入到當(dāng)前對(duì)象方法中的對(duì)象
3) 當(dāng)前對(duì)象的實(shí)例變量直接引用的對(duì)象
4) 當(dāng)前對(duì)象的實(shí)例變量如果是一個(gè)聚集,那么聚集中的元素也都是朋友
5) 當(dāng)前對(duì)象所創(chuàng)建的對(duì)象
posted on 2008-03-27 11:57
Macaulish 閱讀(470)
評(píng)論(0) 編輯 收藏 引用