單一職責(zé)原則
單一職責(zé)原則的英文名稱是Single Responsibility Principle,縮寫是SRP。SPR定義是:就一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因。簡單來說,一個(gè)類中應(yīng)該是一組相關(guān)性很高的函數(shù),數(shù)據(jù)封裝。比如說在封裝一個(gè)圖片加載庫的時(shí)候,我們就應(yīng)該把加載抽成一個(gè)類,讓它只負(fù)責(zé)圖片加載的邏輯;把緩存抽象成一個(gè)類,讓它只負(fù)責(zé)圖片緩存額邏輯。
開閉原則
開閉原則的英文全稱是Open Close Principle,縮寫是OCP,它是Java世界里最基礎(chǔ)的設(shè)計(jì)原則,它指導(dǎo)我們?nèi)绾谓⒁粋€(gè)穩(wěn)定的,靈活的系統(tǒng)。開閉原則的定義是:軟件中的對象(類,模塊,函數(shù)等)應(yīng)該對于擴(kuò)展是開放的,但是對于修改是封閉的。開閉原則指導(dǎo)我們,當(dāng)軟件需要變化時(shí),應(yīng)該盡量通過擴(kuò)展的方式來實(shí)現(xiàn)變化,而不是通過修改已有的代碼來實(shí)現(xiàn)。
里氏替換原則
里氏替換原則(Liskov Substitution Principle),縮寫LSP。定義:所有引用基類的地方必須能透明的使用其子類對象。該原則依賴于面向?qū)ο蟮睦^承,多態(tài)兩大特性,通俗的講,只要父類出現(xiàn)過的地方子類就可以出現(xiàn),而且替換的子類也不會產(chǎn)生任何錯(cuò)誤或異常,使用者可能根本就不需要知道是父類還是子類。但是反過來就不行了,有子類出現(xiàn)的地方,父類未必能適應(yīng),總結(jié)起來就兩個(gè)字:抽象。
里氏替換原則的核心原理是抽象,抽象又依賴于繼承,在OOP中,繼承有許多優(yōu)點(diǎn):
(1)代碼重用,減少創(chuàng)建類的成本,每個(gè)子類都擁有父類的方法和屬性;
(2)子類與父類基本相似,但又與父類又區(qū)別;
(3)提高代碼的擴(kuò)展性。
可是繼承又是侵入性的,只要繼承就必須擁有父類的所有方法和屬性;還可能造成子類代碼冗余,靈活性降低等缺點(diǎn)。
依賴倒置原則
依賴倒置原則(Dependence Inversion Principle),縮寫DIP。依賴倒置原則指代了一種特定的解耦形式,使得高層次的模塊不依賴于低層次的模塊實(shí)現(xiàn)細(xì)節(jié)的目的。該原則有如下幾個(gè)關(guān)鍵點(diǎn):
(1)高層模塊不應(yīng)該依賴低層模塊,兩者都應(yīng)該依賴于其抽象;
(2)抽象不應(yīng)該依賴細(xì)節(jié)
(3)細(xì)節(jié)應(yīng)該依賴抽象
依賴倒置原則在Java語言中的表現(xiàn)就是:模塊間的依賴通過抽象發(fā)生,實(shí)現(xiàn)類之間不發(fā)生直接的依賴關(guān)系,其依賴關(guān)系是通過接口或抽象類產(chǎn)生的,也就是告訴我們要面向接口編程或者說是面向抽象編程。
接口隔離原則
接口隔離原則(Interface Segregation Principle),縮寫ISP。ISP的定義是:客戶端不應(yīng)該依賴它不需要的接口。另一種定義是:類之間的依賴關(guān)系應(yīng)該建立在最小接口上。
迪米特原則
迪米特原則英文全稱為Law of Demeter,縮寫LOD,也稱最少知識原則。也就是一個(gè)對象應(yīng)該對其他對象有最少的了解,通俗講,一個(gè)類應(yīng)該對自己需要耦合或調(diào)用的類知道得最少,類的內(nèi)部如何實(shí)現(xiàn)與調(diào)用者或者依賴著沒有關(guān)系,調(diào)用者或依賴著只需要知道它需要的方法即可,其它可一概不管。