1、單一職責(zé)原則
Single Responsibility Principle, SRP的定義是:就一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因。簡(jiǎn)單來說,一個(gè)類中應(yīng)該是一組相關(guān)性很高的數(shù)據(jù)的封裝。
2、開閉原則
Open Close Principle,OCP,Java中最基礎(chǔ)的設(shè)計(jì)原則,其定義是:軟件中的對(duì)象(類、模塊、函數(shù)等)應(yīng)該對(duì)于擴(kuò)展是開放的,但是對(duì)于修改是封閉的。因此,當(dāng)軟件需求發(fā)生變化時(shí),我們應(yīng)該盡量通過擴(kuò)展的方式來實(shí)現(xiàn)變化,而不是通過修改已有的代碼來實(shí)現(xiàn)。
軟件開發(fā)過程中,最不會(huì)變化的就是變化本身。程序一旦開發(fā)完成,程序中的一個(gè)類的實(shí)現(xiàn)只應(yīng)該因錯(cuò)誤而被修改,新的或者改變的特性應(yīng)該通過新建不同的類實(shí)現(xiàn),新建的類可以通過繼承的方式來重用原類的代碼。
在實(shí)現(xiàn)開閉原則中,就需要使用接口了,因?yàn)閿U(kuò)展原代碼功能的主要方式就是繼承。
3、里氏替換原則
Liskov Substitution Principle,LSP, 其第一種定義是:如果每一個(gè)類型為S的對(duì)象O1,都有類型為T的對(duì)象O2,使得以T定義的所有程序P在所有的對(duì)象O1都代換成O2時(shí),程序P的行為沒有發(fā)生變化,那么類型S是類型T的子類型。里氏替換的第二種定義是:所有引用基類的地方必須能透明地使用其子類的對(duì)象。
面向?qū)ο笳Z(yǔ)言的三大特性:封裝、繼承、多態(tài)。里氏替換原則就是依賴于繼承、多態(tài)這兩個(gè)特性。里氏替換對(duì)依賴注入的問題提供了指導(dǎo)原則,也就是建立抽象,通過抽象建立規(guī)范,具體的實(shí)現(xiàn)在運(yùn)行時(shí)替換掉抽象,保證系統(tǒng)的擴(kuò)展性、靈活性。
開閉原則和里氏替換原則往往是生死相依、不離不棄的,特別是在依賴注入的問題上,通過里氏替換來達(dá)到對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉的效果。這兩個(gè)原則都同事強(qiáng)調(diào)了一個(gè)OOP的重要特性——抽象,在開發(fā)過程種運(yùn)用抽象是走向代碼優(yōu)化的重要一步。
對(duì)于里氏替換原則,個(gè)人認(rèn)為這個(gè)原則,在Java語(yǔ)言層面就已經(jīng)完成了,簡(jiǎn)單而言,就是基類類型的形參對(duì)應(yīng)子類對(duì)象的實(shí)參。
4、依賴倒置原則
Dependence Inversion Principle,DIP,依賴倒置原則指導(dǎo)了一種特定的解耦形式,使得高層次的模塊不依賴于低層次的模塊的實(shí)現(xiàn)細(xì)節(jié)的目的,依賴模塊被顛倒了。
依賴倒置原則由一下幾個(gè)關(guān)鍵點(diǎn):
- 高層模塊不應(yīng)該依賴底層模塊,兩者都應(yīng)該依賴其抽象;
- 抽象不應(yīng)該依賴細(xì)節(jié);
- 細(xì)節(jié)應(yīng)該依賴抽象;
在Java語(yǔ)言中,抽象就是指接口或抽象類,兩者都是不能直接被實(shí)例化的;細(xì)節(jié)就是實(shí)現(xiàn)類,實(shí)現(xiàn)接口或繼承抽象類而產(chǎn)生的類就是細(xì)節(jié)。依賴倒置原則在Java語(yǔ)言中的表現(xiàn)就是:模塊間的依賴通過抽象發(fā)生,實(shí)現(xiàn)類之間不發(fā)生直接的依賴關(guān)系,其依賴關(guān)系是通過接口或抽象類產(chǎn)生的,即面向接口編程。概括起來就是:依賴抽象,而不依賴具體實(shí)現(xiàn)。
5、接口隔離原則
Interface Segregation Principles,ISP,接口隔離原則的定義是:客戶端不應(yīng)該依賴它不需要的接口。另一種定義:類間的依賴關(guān)系應(yīng)該建立在最小的接口上。
接口隔離原則將非常龐大、臃腫的接口拆分成更小的和更具體的接口,這樣客戶就會(huì)指需要知道他們感興趣的方法。接口隔離原則的目的是系統(tǒng)解開耦合,從而容易重構(gòu)、更改和重新部署。
以上五個(gè)原則在21世紀(jì)早期被定義為SOLID原則,作為面向?qū)ο缶幊痰?個(gè)基本原則,基本特點(diǎn)就是:抽象、單一職責(zé)、最小化。
6、迪米特原則
Law of Demeter,LOD,也稱為最少只是原則。一個(gè)對(duì)象更應(yīng)該對(duì)其他對(duì)象有最少的了解。通俗的講:一個(gè)類應(yīng)該對(duì)自己需要耦合或調(diào)用的類知道得最少,類的內(nèi)部如何實(shí)現(xiàn)與調(diào)用者或者依賴者沒關(guān)系,調(diào)用者或者依賴者只需要知道它需要的方法即可,其他的可一概不管。
應(yīng)用六大原則的目的
應(yīng)用軟件的開發(fā)過程中,不能僅僅只關(guān)于去完成,也要考慮到后續(xù)的升級(jí)和維護(hù)過程。簡(jiǎn)單的說明就是擁抱變化,擁抱變化也就一味著在滿足需求且不破壞系統(tǒng)穩(wěn)定性的前提下保持高可擴(kuò)展性、高內(nèi)聚、低耦合。這也是循序六大原則的目的。