參考文章:
http://blog.csdn.net/coolingcoding/article/details/8043265
http://www.cnblogs.com/loulijun/archive/2012/03/05/2380524.html
1、單1職責(zé)原則:
全稱:“Single-Responsibility Principle”
說明:就1個(gè)類而言,應(yīng)當(dāng)只專注于做1件事和唯一1個(gè)引發(fā)它變化的緣由。所謂職責(zé),我們可以理解他為功能,就是設(shè)計(jì)的這個(gè)類功能應(yīng)當(dāng)只有1個(gè),而不是兩個(gè)或更多。也能夠理解為援用變化的緣由,當(dāng)你發(fā)現(xiàn)有兩個(gè)變化會(huì)要求我們修改這個(gè)類,那末你就要斟酌撤分這個(gè)類了。由于職責(zé)是變化的1個(gè)軸線,當(dāng)需求變化時(shí),該變化會(huì)反應(yīng)類的職責(zé)的變化。
使用SRP注意點(diǎn):
1、1個(gè)公道的類,應(yīng)當(dāng)唯一1個(gè)引發(fā)它變化的緣由,即單1職責(zé);
2、在沒有變化征象的情況下利用SRP或其他原則是不明智的;
3、在需求實(shí)際產(chǎn)生變化時(shí)就應(yīng)當(dāng)利用SRP等原則來重構(gòu)代碼;
4、使用測試驅(qū)動(dòng)開發(fā)會(huì)迫使我們在設(shè)計(jì)出現(xiàn)臭味之前分離不公道代碼;
5、如果測試不能迫使職責(zé)分離,僵化性和脆弱性的臭味會(huì)變得很強(qiáng)烈,那就應(yīng)當(dāng)用Facade或Proxy模式對代碼重構(gòu);SRP優(yōu)點(diǎn):消除耦合,減小因需求變化引發(fā)代碼僵化。
2、里氏代換原則
全稱:“Liskov Substitution Principle”
說明:子類型必須能夠替換它們的基類型。1個(gè)軟件實(shí)體如果使用的是1個(gè)基類,那末當(dāng)把這個(gè)基類替換成繼承該基類的子類,程序的行動(dòng)不會(huì)產(chǎn)生任何變化。軟件實(shí)體發(fā)覺不出基類對象和子類對象的區(qū)分。
優(yōu)點(diǎn):可以很容易的實(shí)現(xiàn)同1父類下各個(gè)子類的互換,而客戶端可以絕不發(fā)覺。
3、依賴顛倒原則
全稱:“Dependence Inversion Principle”
說明:
1、高層模塊不應(yīng)當(dāng)依賴低層模塊,二者都應(yīng)當(dāng)依賴于抽象(抽象類或接口)
2、抽象(抽象類或接口)不應(yīng)當(dāng)依賴于細(xì)節(jié)(具體實(shí)現(xiàn)類)
3、細(xì)節(jié)(具體實(shí)現(xiàn)類)應(yīng)當(dāng)依賴抽象
抽象:即抽象類或接口,二者是不能夠?qū)嵗?/span>
細(xì)節(jié):即具體的實(shí)現(xiàn)類,實(shí)現(xiàn)接口或繼承抽象類所產(chǎn)生的類,二者可以通過關(guān)鍵字new直接被實(shí)例化
而依賴顛倒原則的本質(zhì)騎士就是通過抽象(抽象類或接口)使各個(gè)類或模塊的實(shí)現(xiàn)彼此獨(dú)立,不相互影響,實(shí)現(xiàn)模塊間的松耦合。但是這個(gè)原則也是6個(gè)設(shè)計(jì)原則中最難以實(shí)現(xiàn)的了,如果沒有實(shí)現(xiàn)這個(gè)原則,那末也就意味著開閉原則(對擴(kuò)大開發(fā),對修改關(guān)閉)也沒法實(shí)現(xiàn)。
4、接口隔離原則
全稱:“Interface Segregation Principle”
說明:使用多個(gè)專1功能的接口比使用1個(gè)的總接口總要好。從1個(gè)客戶類的角度來說:1個(gè)類對另外1個(gè)類的依賴性應(yīng)當(dāng)是建立在最小接口上的。過于臃腫的接口是對接口的污染,不應(yīng)當(dāng)逼迫客戶依賴于它們不用的方法。
優(yōu)點(diǎn):會(huì)使1個(gè)軟件系統(tǒng)功能擴(kuò)大時(shí),修改的壓力不會(huì)傳到別的對象那里。
如何實(shí)現(xiàn)接口隔離原則
不應(yīng)當(dāng)逼迫用戶依賴于他們不用的方法。
1、利用拜托分離接口。
2、利用多繼承分離接口。
5、迪米特原則
全稱:“Law of Demeter”
說明:對象與對象之間應(yīng)當(dāng)使用盡量少的方法來關(guān)聯(lián),避免千絲萬縷的關(guān)系。
如何實(shí)現(xiàn)迪米特法則?
迪米特法則的主要意圖是控制信息的過載,在將其應(yīng)用到系統(tǒng)設(shè)計(jì)中應(yīng)注意以下幾點(diǎn):
1) 在類的劃分上,應(yīng)當(dāng)創(chuàng)建有弱耦合的類。類之間的耦合越弱,就越有益于復(fù)用。
2) 在類的結(jié)構(gòu)設(shè)計(jì)上,每個(gè)類都應(yīng)當(dāng)盡可能下降成員的訪問權(quán)限。1個(gè)類不應(yīng)當(dāng)public自己的屬性,而應(yīng)當(dāng)提供取值和賦值的方法讓外界間接訪問自己的屬性。
3) 在類的設(shè)計(jì)上,只要有可能,1個(gè)類應(yīng)當(dāng)設(shè)計(jì)成不變類。
4) 在對其它對象的援用上,1個(gè)類對其它對象的援用應(yīng)當(dāng)降到最低。
6、開放-封閉原則
全稱:“Open-Closed Principle”
說明:所謂開放封閉原則就是軟件實(shí)體應(yīng)當(dāng)對擴(kuò)大開發(fā),而對修改封閉。開放封閉原則是所有面向?qū)ο笤瓌t的核心。軟件設(shè)計(jì)本身所尋求的目標(biāo)就是封裝變化,下降耦合,而開放封閉原則正是對這1目標(biāo)的最直接體現(xiàn)。
開放封閉原則主要體現(xiàn)在兩個(gè)方面:
對擴(kuò)大開放,意味著有新的需求或變化時(shí),可以對現(xiàn)有代碼進(jìn)行擴(kuò)大,以適應(yīng)新的情況。
對修改封閉,意味著類1旦設(shè)計(jì)完成,就能夠獨(dú)立其工作,而不要對類盡任何修改。
為何要用到開放封閉原則呢?
軟件需求總是變化的,世界上沒有1個(gè)軟件的是不變的,因此對軟件設(shè)計(jì)人員來講,必須在不需要對原有系統(tǒng)進(jìn)行修改的情況下,實(shí)現(xiàn)靈活的系統(tǒng)擴(kuò)大。