1、單一職責(zé)原則
Single Responsibility Principle代箭, SRP的定義是:就一個(gè)類而言嫩与,應(yīng)該僅有一個(gè)引起它變化的原因。簡(jiǎn)單來(lái)說(shuō)儡毕,一個(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)該盡量通過(guò)擴(kuò)展的方式來(lái)實(shí)現(xiàn)變化永毅,而不是通過(guò)修改已有的代碼來(lái)實(shí)現(xiàn)谎痢。
軟件開發(fā)過(guò)程中,最不會(huì)變化的就是變化本身卷雕。程序一旦開發(fā)完成,程序中的一個(gè)類的實(shí)現(xiàn)只應(yīng)該因錯(cuò)誤而被修改票从,新的或者改變的特性應(yīng)該通過(guò)新建不同的類實(shí)現(xiàn)漫雕,新建的類可以通過(guò)繼承的方式來(lái)重用原類的代碼滨嘱。
在實(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ì)依賴注入的問(wèn)題提供了指導(dǎo)原則速缨,也就是建立抽象,通過(guò)抽象建立規(guī)范代乃,具體的實(shí)現(xiàn)在運(yùn)行時(shí)替換掉抽象旬牲,保證系統(tǒng)的擴(kuò)展性、靈活性襟己。
開閉原則和里氏替換原則往往是生死相依引谜、不離不棄的,特別是在依賴注入的問(wèn)題上擎浴,通過(guò)里氏替換來(lái)達(dá)到對(duì)擴(kuò)展開放员咽,對(duì)修改關(guān)閉的效果。這兩個(gè)原則都同事強(qiáng)調(diào)了一個(gè)OOP的重要特性——抽象贮预,在開發(fā)過(guò)程種運(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)就是:模塊間的依賴通過(guò)抽象發(fā)生谴供,實(shí)現(xiàn)類之間不發(fā)生直接的依賴關(guān)系块茁,其依賴關(guān)系是通過(guò)接口或抽象類產(chǎn)生的,即面向接口編程桂肌。概括起來(lái)就是:依賴抽象数焊,而不依賴具體實(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ò)程中琉朽,不能僅僅只關(guān)于去完成,也要考慮到后續(xù)的升級(jí)和維護(hù)過(guò)程稚铣。簡(jiǎn)單的說(shuō)明就是擁抱變化箱叁,擁抱變化也就一味著在滿足需求且不破壞系統(tǒng)穩(wěn)定性的前提下保持高可擴(kuò)展性、高內(nèi)聚惕医、低耦合耕漱。這也是循序六大原則的目的。