六大原則
單一職責(zé)原則
里氏替換原則
依賴倒置原則
接口隔離原則
迪米特原則
開閉原則
單一職責(zé)
概念:對(duì)功能進(jìn)行分類歌亲,代碼進(jìn)行解耦
栗子:一個(gè)網(wǎng)絡(luò)請(qǐng)求框架大致分為:請(qǐng)求類菇用,緩存類,配置類陷揪;不能把這三個(gè)功能混合在一起惋鸥,必須分成三個(gè)類分別去實(shí)現(xiàn)不同的功能
里氏替換
概念:在繼承類時(shí),除了擴(kuò)展一些新的功能之外悍缠,盡量不要?jiǎng)h除或者修改對(duì)父類方法的引用卦绣,也盡量不要重載父類的方法
栗子:每個(gè)類都是Object的子類,Object類中有一個(gè)toString()的方法飞蚓,假如子類重寫該方法并且返回null滤港,這個(gè)子類的下一級(jí)繼承返回的都是null,那么在不同開發(fā)人員維護(hù)時(shí)可能考慮不到這個(gè)問題趴拧,并且很可能會(huì)導(dǎo)致程序崩潰
依賴倒置
概念:高層模塊不依賴低層次模塊的細(xì)節(jié)溅漾,高層次就是不依賴細(xì)節(jié)而是依賴抽象(不依賴具體的類,而是依賴于接口)
栗子:某個(gè)網(wǎng)絡(luò)框架為了滿足不同開發(fā)者的需求著榴,即能使用高效的OkHttp框架添履,也可以使用原生的API。正所謂蘿卜白菜各有所愛脑又,那么是如何進(jìn)行切換的呢暮胧,這個(gè)時(shí)候需要面向接口編程思想了,把一些網(wǎng)絡(luò)請(qǐng)求的方法封裝成一個(gè)接口问麸,然后分別創(chuàng)建OkHttp和原生API的接口實(shí)現(xiàn)類往衷,當(dāng)然也方便后續(xù)其他開發(fā)人員進(jìn)行擴(kuò)展其他網(wǎng)絡(luò)框架的應(yīng)用
接口隔離
概念:在定義接口方法時(shí)應(yīng)該合理化,盡量追求簡(jiǎn)單最小严卖,避免接口臃腫
栗子:在實(shí)際開發(fā)中席舍,往往為了節(jié)省時(shí)間,可能會(huì)將多個(gè)功能的方法抽成一個(gè)接口妄田,其實(shí)這設(shè)計(jì)理念不正確的俺亮,這樣會(huì)使接口處于臃腫的狀態(tài)驮捍,這時(shí)就需要合理的拆分接口中的方法,另外抽取成一個(gè)獨(dú)立的接口脚曾,避免原有的接口臃腫導(dǎo)致代碼理解困難
迪米特 | 最少知道
概念:一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象有最少的了解东且;一個(gè)類應(yīng)該對(duì)自己需要耦合或調(diào)用的類知道得最少,類的內(nèi)部如何實(shí)現(xiàn)本讥、如何復(fù)雜都與調(diào)用者或者依賴者沒關(guān)系珊泳,調(diào)用者或者依賴者只需要知道他需要的方法即可,其他的一概不關(guān)心拷沸。類與類之間的關(guān)系越密切色查,耦合度越大,當(dāng)一個(gè)類發(fā)生改變時(shí)撞芍,對(duì)另一個(gè)類的影響也越大秧了。只與直接的朋友通信。每個(gè)對(duì)象都必然會(huì)與其他對(duì)象有耦合關(guān)系序无,兩個(gè)對(duì)象之間的耦合就成為朋友關(guān)系验毡,這種關(guān)系的類型有很多,例如組合帝嗡、聚合晶通、依賴等。
栗子:一般在使用框架的時(shí)候哟玷,框架的開發(fā)者會(huì)抽出一個(gè)類供外部調(diào)用狮辽,而這個(gè)主要的類像是一個(gè)中介一樣去調(diào)用框架里面的其他類,恰恰框架里面其他類一般都是不可訪問(調(diào)用)的巢寡,這個(gè)框架就遵守了迪米特原則喉脖,其他開發(fā)人員只關(guān)心調(diào)用的方法,并不需要關(guān)心功能具體如何實(shí)現(xiàn)
開閉
概念:類讼渊、模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開放动看,對(duì)修改關(guān)閉
栗子:在軟件的生命周期內(nèi),因?yàn)樽兓谩⑸?jí)和維護(hù)等原因需要對(duì)軟件原有代碼進(jìn)行修改時(shí)菱皆,可能會(huì)給舊代碼中引入錯(cuò)誤,也可能會(huì)使我們不得不對(duì)整個(gè)功能進(jìn)行重構(gòu)挨稿,并且需要原有代碼經(jīng)過重新測(cè)試仇轻,整個(gè)流程對(duì)開發(fā)周期影響很大,這個(gè)時(shí)候就需要開閉原則來(lái)解決這種問題奶甘,在前期代碼設(shè)計(jì)的時(shí)候篷店,要盡量考慮擴(kuò)展性,避免后續(xù)新增功能的時(shí)候需要引發(fā)代碼的重構(gòu)
總結(jié)
單一職責(zé)原則告訴我們實(shí)現(xiàn)類要職責(zé)單一
里氏替換原則告訴我們不要破壞繼承體系
依賴倒置原則告訴我們要面向接口編程
接口隔離原則告訴我們?cè)谠O(shè)計(jì)接口的時(shí)候要精簡(jiǎn)單一
迪米特原則告訴我們要降低耦合
開閉原則是總綱,告訴我們要對(duì)擴(kuò)展開放疲陕,對(duì)修改關(guān)閉
精品文章
如果不夠準(zhǔn)確方淤,請(qǐng)幫忙指出
這篇文章要是對(duì)你有幫助的話,記得點(diǎn)個(gè)贊