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