面向?qū)ο笾杏辛笤瓌t,分別是:
- 單一職責(zé)原則(SRP邦鲫,Single Responsibility Principle)
- 開放封閉原則(OCP禀横,Open Closed Principle)
- 里氏替換原則(LSP)
- 接口隔離原則(ISP,Interface Segregation Principle)
- 依賴倒置原則(DIP,Dependence Inversion Principle)
- 迪米特原則(LOD)
每一個(gè)原則都有它存在的道理虑瀑,理解透徹了這些原則會(huì)大有益處逛拱。
單一職責(zé)原則
概念
就是讓類職責(zé)盡量明確敌厘,最好每個(gè)類只有一種職責(zé),這也是理想狀態(tài)朽合。經(jīng)驗(yàn)告訴我俱两,只要類職責(zé)能表達(dá)清楚就是一個(gè)好的類劃分。
重要性
理解了單一職責(zé)曹步,可以幫助我們合理的劃分結(jié)構(gòu)锋华,理解問題,并解決問題箭窜。更重要的是職責(zé)清晰了毯焕,方便后續(xù)代碼維護(hù),就不會(huì)輕易就改錯(cuò)了磺樱。
怎么做纳猫?
- 對(duì)象職責(zé)不清,就有可能造成邏輯錯(cuò)綜復(fù)雜竹捉,進(jìn)而表現(xiàn)為類代碼臃腫芜辕,這些類就需要進(jìn)行拆分。
- 檢查類的功能是否獨(dú)立块差,特別是一些基礎(chǔ)類庫侵续,應(yīng)該保證都是單一職責(zé)的。
- 代碼耦合度太高憨闰,也是重點(diǎn)關(guān)注的對(duì)象状蜗。
- 根據(jù)實(shí)際開發(fā)經(jīng)驗(yàn)而定。
開放封閉原則
概念
該原則有兩個(gè)重要的特性:
1>面向擴(kuò)展開放鹉动。
也就是說模塊的行為是能夠被擴(kuò)展的轧坎。當(dāng)應(yīng)用程序的需求變化時(shí),我們可以使模塊表現(xiàn)出全新的或與以往不同的行為泽示,以滿足新的需求缸血。
2>面向修改封閉蜜氨。
模塊的源代碼是不能被侵犯的,任何人都不允許修改已有源代碼捎泻。
重要性
提高代碼的可重用和可維護(hù)飒炎。
怎么做?
對(duì)擴(kuò)展開放笆豁,對(duì)修改關(guān)閉郎汪,其含義是說一個(gè)軟件實(shí)體應(yīng)該通過擴(kuò)展來實(shí)現(xiàn)變化,而不是通過修改已有的代碼來實(shí)現(xiàn)變化渔呵。
參考
1.設(shè)計(jì)模式六大原則例子(六)-- 開放封閉原則(OCP)例子
2.開放封閉原則(Open Closed Principle)
里氏替換原則
概念
所有引用基類的地方必須能透明地使用其子類的對(duì)象怒竿。主張使用“抽象(Abstraction)”和“多態(tài)(Polymorphism)”將設(shè)計(jì)中的靜態(tài)結(jié)構(gòu)改為動(dòng)態(tài)結(jié)構(gòu)砍鸠,維持設(shè)計(jì)的封閉性扩氢。
重要性
可將講臺(tái)的代碼變?yōu)閯?dòng)態(tài)代碼。使用上更加靈活爷辱,同時(shí)也是為了更好的擴(kuò)展录豺。
怎么做?
- 子類可以實(shí)現(xiàn)父類的抽象方法饭弓,但是不能覆蓋父類的非抽象方法双饥。
- 子類中可以增加自己特有的方法。
- 當(dāng)子類覆蓋或?qū)崿F(xiàn)父類的方法時(shí)弟断,方法的前置條件(即方法的形參)要比父類方法的輸入?yún)?shù)更寬松咏花。
- 當(dāng)子類的方法實(shí)現(xiàn)父類的抽象方法時(shí),方法的后置條件(即方法的返回值)要比父類更嚴(yán)格阀趴。
參考
里氏替換原則的理解
六大設(shè)計(jì)原則之里氏替換原則
接口隔離原則
概念
接口隔離有兩種定義:
1.客戶端不應(yīng)該依賴它不需要的接口昏翰;
2.一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上。
重要性
可降低代碼的耦合度刘急。
怎么做棚菊?
建立單一接口,不要建立臃腫龐大的接口叔汁。再通俗的說就是接口盡量細(xì)化统求,同時(shí)接口中的方法盡量少。
參考
六大設(shè)計(jì)原則之接口隔離原則
面向?qū)ο笤O(shè)計(jì)原則之接口隔離原則(ISP)
依賴倒置原則
概念
- 高層模塊不應(yīng)該依賴低層模塊据块,兩者都應(yīng)該依賴抽象
- 抽象不應(yīng)該依賴細(xì)節(jié)
- 細(xì)節(jié)應(yīng)該依賴抽象
通俗的講码邻,就是抽象類不依賴具體實(shí)現(xiàn),但是實(shí)現(xiàn)類必須依賴抽象類另假。
重要性
采用依賴倒置原則可以減少類間的耦合性冒滩,提高系統(tǒng)的穩(wěn)定,降低并行開發(fā)引起的風(fēng)險(xiǎn)浪谴,提高代碼的可讀性和可維護(hù)性开睡。
參考
1.六大設(shè)計(jì)原則之依賴倒置原則
2.設(shè)計(jì)模式六大原則例子(四)-- 依賴倒置原則(DIP)例子
迪米特原則
概念
一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象有最少的了解因苹。換言之,一個(gè)對(duì)象對(duì)外暴露的方法越少越好篇恒。
重要性
還是為了降低耦合度扶檐。
怎么做?
1胁艰、只與朋友類交流
出現(xiàn)在成員變量款筑,方法的輸入輸出參數(shù)中的類,稱為朋友類
2腾么、朋友類間也是要有距離
對(duì)象對(duì)外暴露的方法盡可能少
參考
六大設(shè)計(jì)原則之迪米特原則
迪米特法則詳解--七大面向?qū)ο笤O(shè)計(jì)原則(6)
總結(jié)
這六大原則都是為了降低代碼的耦合度奈梳,提高代碼的可維護(hù)性,可重用性和可擴(kuò)展性解虱,要合理使用還需要細(xì)細(xì)揣摩攘须。