設計模式六大原則之單一職責原則

最近在看一點設計模式的內容,在說23種設計模式之前,先要談談設計模式的六大原則,當然也有種說法是面向對象的六大原則,今天我們先談談單一職責原則忿檩。

一裁奇、定義

單一職責原則(Single Responsibility Principle)的定義是:一個類,應該只有一個引起它變化的原因。說白了,就是讓一個類只負責一件事,將關聯(lián)性強的內容聚合到一個類中少漆。

二章郁、代碼示例

首先我們有一個用戶信息類(接口)(IUserInfo.java)

public interface IUserInfo {
    void getId();
    void setId(int id);
    void getName();
    void setName(String name);
    void getPassword();
    void setPassword(String password);

    void addUser(int id, String name, String password);
    void deleteUser(int id);
}

下面是它的UML圖:


UML圖

看到上面的代碼,很多人可能就說了,這個代碼有問題啊,怎么可以將業(yè)務對象業(yè)務邏輯的內容放到一個類中,業(yè)務對象業(yè)務邏輯都會引起IUserInfo類的變化,上面的代碼就違反了單一職責原則车要。
那我們按照單一職責的要求碰纬,我們要怎么改呢?那就是讓一個類只做一件事,我們對上面的代碼做如下的變化:

public interface IUserBo {
    void getId();
    void setId(int id);
    void getName();
    void setName(String name);
    void getPassword();
    void setPassword(String password);
}
public interface IUserBiz {
    void addUser(int id, String name, String password);
    void deleteUser(int id);
}

上面,我們將IUserInfo拆分為了IUserBoIUserBiz,然后讓IUserBiz在適當時候去操作IUserBo即可萍聊。
經(jīng)過上面的修改,我們就實現(xiàn)了兩個類的單一職責,也就是讓引起他們變化原因只有一種,并且讓相關性強的內容聚合在一個類內部。

三悦析、優(yōu)點

通過上面簡單的例子,我們來總結一下單一職責原則的優(yōu)點

1 . 類的復雜性降低,由于我們讓每個類的職責單一,這樣每個類職責清楚,定義明確

2 . 可讀性提高了,復雜性降低了,類更便于維護

3 . 變更的風險降低了,需求一直在變,使用單一職責,只需要修改一個接口及其實現(xiàn)類,對其他類和接口沒有影響

四寿桨、疑惑

看了上面的內容,可能有人覺得例子這么簡單,而且說了半天貌似只是接口職責單一,類的職責并不是單一的。對强戴,確實是這樣亭螟。
首先,對于職責的劃分這個是人為因素,可能每個人都有不同的看法,這種劃分沒有一個標準答案,因項目和環(huán)境而異。我們只需要盡量讓一個類的職責清楚,讓引起這個類變化的原因只有一個即可骑歹。但其實總是很難做到的,隨著項目經(jīng)驗的增加,可能才會讓我們設計的類越來越完善媒佣。我們要保證接口職責單一,類的職責盡量單一即可。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末陵刹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子欢嘿,更是在濱河造成了極大的恐慌衰琐,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炼蹦,死亡現(xiàn)場離奇詭異羡宙,居然都是意外死亡,警方通過查閱死者的電腦和手機掐隐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門狗热,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人虑省,你說我怎么就攤上這事匿刮。” “怎么了探颈?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵熟丸,是天一觀的道長。 經(jīng)常有香客問我伪节,道長光羞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任怀大,我火速辦了婚禮纱兑,結果婚禮上,老公的妹妹穿的比我還像新娘化借。我一直安慰自己潜慎,他們只是感情好,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著勘纯,像睡著了一般局服。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驳遵,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天淫奔,我揣著相機與錄音,去河邊找鬼堤结。 笑死唆迁,一個胖子當著我的面吹牛,可吹牛的內容都是我干的竞穷。 我是一名探鬼主播唐责,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瘾带!你這毒婦竟也來了鼠哥?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后们陆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡于颖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了嚷兔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片森渐。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖冒晰,靈堂內的尸體忽然破棺而出同衣,到底是詐尸還是另有隱情,我是刑警寧澤翩剪,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布乳怎,位于F島的核電站,受9級特大地震影響前弯,放射性物質發(fā)生泄漏蚪缀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一恕出、第九天 我趴在偏房一處隱蔽的房頂上張望询枚。 院中可真熱鬧,春花似錦浙巫、人聲如沸金蜀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渊抄。三九已至尝胆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間护桦,已是汗流浹背含衔。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留二庵,地道東北人贪染。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像催享,于是被迫代替她去往敵國和親杭隙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內容

  • 設計模式六大原則 設計模式六大原則(1):單一職責原則 定義:不要存在多于一個導致類變更的原因因妙。通俗的說痰憎,即一個類...
    viva158閱讀 770評論 0 1
  • 轉載標注聲明:http://www.uml.org.cn/sjms/201211023.asp 目錄:[設計模式六...
    Bloo_m閱讀 720評論 0 7
  • 設計模式六大原則(1):單一職責原則 定義:不要存在多于一個導致類變更的原因。通俗的說攀涵,即一個類只負責一項職責信殊。 ...
    Jabir_Zhang閱讀 646評論 0 3
  • 設計模式之六大原則(轉載) 關于設計模式的六大設計原則的資料網(wǎng)上很多...
    霄霄霄霄閱讀 900評論 0 1
  • 荔枝電臺:愿善良的你据德,得到溫柔的對待! 從蘇州回來跷车,我便投奔了閨蜜棘利。只是整日里她的男友進進出出的,很尷尬朽缴,我只得另...
    陳牧之洲閱讀 370評論 0 4