單一職責(zé)原則

單一職責(zé)原則

There should never be more than one reason for a class to change.

分析

電話通話的時(shí)候有四個(gè)過程發(fā)生:撥號(hào)、通話、回應(yīng)、掛機(jī)邻奠,如下所示:

image

下面是具體代碼實(shí)現(xiàn):

/**
 * 類描述:
 *
 * @author:tangniannian
 * @date:2016/12/5
 * @修改描述:
 * @modifier ${tags}
 */
public interface IPhone {

    void dial(String phoneNum);

    void chat(Object o);

    void hangup();
}

上面的代碼看起來沒有問題,但是單一職責(zé)原則要求一個(gè)接口或者類只有一個(gè)原因引起變化为居,也就是說一個(gè)接口或者類只有一個(gè)職責(zé)碌宴,它就負(fù)責(zé)一件事,上面的接口顯然并不是只負(fù)責(zé)一件事情蒙畴。
IPone這個(gè)接口可不只是有一個(gè)職責(zé)贰镣,它包含了兩個(gè)職責(zé):一個(gè)是協(xié)議管理,一個(gè)是數(shù)據(jù)送達(dá)膳凝。dial()和hangup()兩個(gè)方法實(shí)現(xiàn)的是協(xié)議管理碑隆,分別負(fù)責(zé)撥號(hào)和掛機(jī);chat()是實(shí)現(xiàn)數(shù)據(jù)送達(dá)蹬音。
下面分析上面存在的問題上煤。第一,協(xié)議變化顯然會(huì)造成接口或者類引起變化著淆;第二劫狠,數(shù)據(jù)傳送也會(huì)造成接口或者類引起變化。
分析發(fā)現(xiàn)永部,上面的接口包含了兩個(gè)職責(zé)独泞,而且兩個(gè)職責(zé)互不影響,所以考慮拆分為兩個(gè)接口苔埋。如下圖所示:

image

// 代碼描述

public interface IDataTransfer {

    void chat(IConnectionManager iConnectionManager);
}
public interface IConnectionManager {

    void dial(String phoneNum);

    void hangup();
}
/**
 * 類描述:電話具有撥打電話懦砂、掛斷電話、通話的功能
 *
 * @修改描述:
 * @modifier ${tags}
 */
public class Phone implements IConnectionManager, IDataTransfer{


    public void dial(String phoneNum) {

    }

    public void hangup() {

    }

    public void chat(IConnectionManager iConnectionManager) {
        
    }

}

總結(jié) 單一職責(zé)原則優(yōu)點(diǎn)

  • 類的復(fù)雜性降低组橄,實(shí)現(xiàn)什么職責(zé)都有清晰明確的定義荞膘;
  • 可讀性提高,復(fù)雜性降低晨炕,那當(dāng)然可讀性提高了衫画;
  • 可維護(hù)性提高,可讀性提高瓮栗,那當(dāng)然更容易維護(hù)了削罩;
  • 變更引起的風(fēng)險(xiǎn)降低,變更是必不可少的费奸,如果接口的單一職責(zé)做得好弥激,一個(gè)接口修改只對(duì)相應(yīng)的實(shí)現(xiàn)類有影響,對(duì)其他的接口無影響愿阐,這對(duì)系統(tǒng)的擴(kuò)展性微服、維護(hù)性都有非常大的幫助。

分析

對(duì)于接口缨历,我們?cè)谠O(shè)計(jì)的時(shí)候一定要做到單一以蕴,但是對(duì)于實(shí)現(xiàn)類就需要多方面考慮了糙麦。生搬硬套單一職責(zé)原則會(huì)引起類的劇增,給維護(hù)帶來非常多的麻煩丛肮,而且過分細(xì)分類的職責(zé)也會(huì)人為地增加系統(tǒng)的復(fù)雜性赡磅。本來一個(gè)類可以實(shí)現(xiàn)的行為硬要拆成兩個(gè)類,然后再使用聚合或組合的方式耦合在一起宝与,人為制造了系統(tǒng)的復(fù)雜性焚廊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市习劫,隨后出現(xiàn)的幾起案子咆瘟,更是在濱河造成了極大的恐慌,老刑警劉巖诽里,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袒餐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡须肆,警方通過查閱死者的電腦和手機(jī)匿乃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來豌汇,“玉大人幢炸,你說我怎么就攤上這事【芗” “怎么了宛徊?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)逻澳。 經(jīng)常有香客問我闸天,道長(zhǎng),這世上最難降的妖魔是什么斜做? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任苞氮,我火速辦了婚禮,結(jié)果婚禮上瓤逼,老公的妹妹穿的比我還像新娘笼吟。我一直安慰自己,他們只是感情好霸旗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布贷帮。 她就那樣靜靜地躺著,像睡著了一般诱告。 火紅的嫁衣襯著肌膚如雪撵枢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音锄禽,去河邊找鬼潜必。 笑死,一個(gè)胖子當(dāng)著我的面吹牛沟绪,可吹牛的內(nèi)容都是我干的刮便。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼绽慈,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了辈毯?” 一聲冷哼從身側(cè)響起坝疼,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谆沃,沒想到半個(gè)月后钝凶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唁影,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年耕陷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片据沈。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哟沫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锌介,到底是詐尸還是另有隱情嗜诀,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布孔祸,位于F島的核電站隆敢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏崔慧。R本人自食惡果不足惜拂蝎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惶室。 院中可真熱鬧温自,春花似錦、人聲如沸拇涤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹅士。三九已至券躁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背也拜。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國打工以舒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慢哈。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓蔓钟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親卵贱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子滥沫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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