設(shè)計(jì)原則(3) : 單一職責(zé)原理

不要存在多于一個(gè)導(dǎo)致類變更的原因.

舉個(gè)簡(jiǎn)單的例子, 我定義了一個(gè)接口AB, 定義了兩個(gè)方法 methodA 和methodB

public interface AB {
    void methodA(String a);
    void methodB(String b);
}

這時(shí)我需要有一個(gè)方法需要實(shí)現(xiàn)接口A,但是因?yàn)锳B兩個(gè)接口是在一起的,所以這里我給B一個(gè)空實(shí)現(xiàn),代碼如下:

public class AImpl1 implements AB{
    @Override
    public void methodA(String a) {
        System.out.println(a);
    }
    @Override
    public void methodB(String b) {
        return;
    }
}

這時(shí)需求變化,我不得不對(duì)methodB做一些修改,比如增加一個(gè)參數(shù), 此時(shí)AImpl1這個(gè)類明明并不關(guān)心methodB卻因?yàn)锳B接口的更改而不得不隨之改動(dòng).

這時(shí)我們需要修改設(shè)計(jì), 將AB接口拆成兩個(gè)獨(dú)立的接口

public interface A {
    void methodA(String a);
}
public interface B {
    void methodA(String a);
}

這時(shí)A的實(shí)現(xiàn)類只需實(shí)現(xiàn)A接口即可

public class AImpl2 implements A{
    @Override
    public void methodA(String a){
        System.out.println(a);
    }
}

此時(shí)如果B接口有改動(dòng),那么只需修改實(shí)現(xiàn)了B接口的類即可,AImpl2 類不受影響, 即只存在一個(gè)導(dǎo)致類AImpl2 更改的原因

類的單一職責(zé), 貼個(gè)別人的代碼示例幫助理解
https://blog.csdn.net/zhengzhb/article/details/7278174

另外做一點(diǎn)補(bǔ)充, 單一職責(zé)原理不僅僅是一個(gè)類或接口應(yīng)該承擔(dān)盡量少的職責(zé), 函數(shù)也是, 我們?cè)诠ぷ髦型ǔ?huì)對(duì)一些業(yè)務(wù)邏輯做一些封裝來讓代碼的邏輯看起來清晰一點(diǎn), 當(dāng)封裝到函數(shù)中業(yè)務(wù)邏輯發(fā)生變化時(shí), 比如需要對(duì)一些特殊的值或場(chǎng)景做一些額外的處理, 比較簡(jiǎn)便的做法是直接 if else即可, 但更推薦遵循單一職責(zé)原理, 把不同的業(yè)務(wù)邏輯封裝到不同的方法中, 這樣代碼會(huì)更清晰, 代碼也更易維護(hù)一些
比如我們經(jīng)常遇到這種情況, 參數(shù)中傳入一個(gè)boolean值根據(jù)是否為真執(zhí)行不同的邏輯, 這時(shí)代碼的可讀性就不太好,從方法名無法明確知道方法的職責(zé), 因?yàn)榉椒鶕?jù)不同的邏輯承擔(dān)了兩種責(zé)任

    public void doSth(Object obj, boolean flag){
        if(flag){
            // TODO ...
        }else {
            // TODO ...
        }
    }

建議改寫為

    public void doSth1(Object obj){
        // TODO ...
    }
    public void doSth2(Object obj){
        // TODO ...
    }

這樣每個(gè)函數(shù)承擔(dān)各自的職責(zé),邏輯判斷交給上層, 這樣邏輯會(huì)更加清晰, 如果將來邏輯發(fā)生變更我們只需要更改變更的那個(gè)函數(shù)的即可,不會(huì)對(duì)另一個(gè)函數(shù)的代碼造成影響

優(yōu)點(diǎn)
  • 降低類的復(fù)雜度,提高可讀性
  • 提高系統(tǒng)可維護(hù)性,降低變更引起的風(fēng)險(xiǎn)

github源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子临梗,更是在濱河造成了極大的恐慌戳粒,老刑警劉巖苦丁,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昭卓,死亡現(xiàn)場(chǎng)離奇詭異黍特,居然都是意外死亡笨枯,警方通過查閱死者的電腦和手機(jī)薪丁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馅精,“玉大人严嗜,你說我怎么就攤上這事≈薷遥” “怎么了漫玄?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)压彭。 經(jīng)常有香客問我睦优,道長(zhǎng),這世上最難降的妖魔是什么壮不? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任汗盘,我火速辦了婚禮,結(jié)果婚禮上忆畅,老公的妹妹穿的比我還像新娘衡未。我一直安慰自己,他們只是感情好家凯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布缓醋。 她就那樣靜靜地躺著,像睡著了一般绊诲。 火紅的嫁衣襯著肌膚如雪送粱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天掂之,我揣著相機(jī)與錄音抗俄,去河邊找鬼脆丁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛动雹,可吹牛的內(nèi)容都是我干的槽卫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼胰蝠,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼歼培!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起茸塞,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤躲庄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后钾虐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體噪窘,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年效扫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了倔监。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荡短,死狀恐怖丐枉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掘托,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布籍嘹,位于F島的核電站闪盔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏辱士。R本人自食惡果不足惜泪掀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望颂碘。 院中可真熱鬧异赫,春花似錦、人聲如沸头岔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)峡竣。三九已至靠抑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間适掰,已是汗流浹背颂碧。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工荠列, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人载城。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓肌似,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親诉瓦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子川队,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 文/小巖井 1 金庸小說中呼寸,我最愛《笑傲江湖》,眾多人物中猴贰,我最愛令狐沖对雪。但由于初讀時(shí)年紀(jì)小,每逢讀到令狐沖對(duì)小師...
    聯(lián)動(dòng)書匠閱讀 333評(píng)論 0 4
  • 2月27日 星期二 天氣晴 最近這兩天小寶晚上睡覺總醒好幾次米绕,我就沒法睡個(gè)好覺了瑟捣,白天上班也沒精神,早上不到9....
    a夏天的童話a閱讀 165評(píng)論 5 2
  • 此時(shí)的高二E班的男同學(xué)都目不轉(zhuǎn)睛的看著講臺(tái)上的兩個(gè)女孩栅干,而女生們則是一臉的嫉妒迈套。 “唉......唉......先...
    扶蘇言閱讀 379評(píng)論 1 0
  • 經(jīng)過前面這些過程桑李,網(wǎng)絡(luò)連接所需要的條件就全部準(zhǔn)備就緒,接下來就是等待網(wǎng)絡(luò)接入把網(wǎng)絡(luò)接入過程簡(jiǎn)單分為三個(gè)階段觸發(fā)階段...
    xiabodan閱讀 1,477評(píng)論 0 1