java设计模式之设计原则③单一职责原则
定義:
不要存在多于一個(gè)導(dǎo)致類變更的原因
一個(gè)類/接口/方法只負(fù)責(zé)一項(xiàng)職責(zé)
優(yōu)點(diǎn):
降低類的復(fù)雜度,提高類的可讀性,提高系統(tǒng)的可維護(hù)性、降低變更引起的風(fēng)險(xiǎn)
以下通過案例進(jìn)行理解單一職責(zé)原則:
創(chuàng)建一個(gè)Brid(鳥)類
創(chuàng)建一個(gè)Test測試類
我們會(huì)發(fā)現(xiàn)大雁用翅膀非是正確的,但鴕鳥飛不起來,所以我們需要進(jìn)行判斷
如果現(xiàn)在再傳來一些特色的鳥類,那我們這個(gè)方法還要繼續(xù)擴(kuò)展,風(fēng)險(xiǎn)率就變高了,不遵從單一原則。
所以我們現(xiàn)在就從類的層次上將這個(gè)Brid拆分開。
創(chuàng)建一個(gè)FlyBrid類 表示 會(huì)飛的鳥
再創(chuàng)建一個(gè)WalkBrid類 表示 走路的鳥
在Test類中就將飛的鳥和走路的鳥進(jìn)行一個(gè)區(qū)分
這個(gè)就是一個(gè)類的單一原則的體現(xiàn),我們把一個(gè)類進(jìn)行拆分,這樣就使得每個(gè)類里面的方法職責(zé)是單一的,比較簡單,也不至于修改的時(shí)候引入新的問題。
類圖如下:
這個(gè)類圖還是比較簡單的
現(xiàn)在呢我們就是用test類去創(chuàng)建FlyBrid和WalkBrid兩個(gè)類,對于Brid類已經(jīng)沒用了
對于職責(zé)呢在類層次上還是比較清晰的,這是對于類的單一職責(zé)
那接下來就用接口舉例
還是用ICourse進(jìn)行舉例,創(chuàng)建ICourse接口
getCourseName獲取課程名稱的方法
getCourseVideo獲取視頻的方法
studyCourse學(xué)習(xí)課程的方法
refundCourse退款方法
對于上面的ICourse接口可不是只有一個(gè)職責(zé),首先它一個(gè)大職責(zé)是獲得課程信息( 課程名稱和視頻信息),那另外一個(gè)職責(zé)呢就是管理課程,和課程內(nèi)容無關(guān),例如學(xué)習(xí)課程,那如果我們學(xué)習(xí)課程就要獲取課程名稱和視頻,那如果退了這個(gè)課程吶可能就獲取不了這個(gè)課程名稱和視頻,那就是說退這個(gè)課程會(huì)影響課程這個(gè)接口的獲取課程內(nèi)容相關(guān)的變化,這兩個(gè)職責(zé)是互相影響的,那我們就可以把這個(gè)接口拆成兩個(gè)接口,一個(gè)接口負(fù)責(zé)獲取課程信息,另一個(gè)接口管理課程
創(chuàng)建一個(gè)接口ICourseManager
再創(chuàng)建一個(gè)接口ICourseContent
現(xiàn)在我們來創(chuàng)建一個(gè)ICourse的實(shí)現(xiàn)類實(shí)現(xiàn)ICourseManager 和ICourseContent接口
類圖如下:
課程的實(shí)現(xiàn)類實(shí)現(xiàn)兩個(gè)接口,職責(zé)呢也是單一的,一個(gè)接口的修只對響應(yīng)的實(shí)現(xiàn)類有影響,與其他的接口無關(guān),這個(gè)就是從接口級別上來展示單一職責(zé)
接下來就是方法級別來展示單一職責(zé):
創(chuàng)建一個(gè)類Method
寫一個(gè)方法updataUserInfo 參數(shù) 可以更新userName 姓名 address 地址
拆分如下
這樣兩個(gè)方法的職責(zé)就是單一切清晰的,這樣關(guān)于方法的單一職責(zé)就展示出來了。
在我們實(shí)際的開發(fā)中如果類都遵循單一職責(zé)可能會(huì)導(dǎo)致類太多出現(xiàn)爆炸,
所以我們的接口和方法一定要展示單一職責(zé),類的單一職責(zé)就看項(xiàng)目的情況而定。
總結(jié)
以上是生活随笔為你收集整理的java设计模式之设计原则③单一职责原则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java设计模式之设计原则②依赖倒置原则
- 下一篇: java设计模式之设计原则④接口隔离原则