最近在看一點設計模式的內容,在說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圖:
看到上面的代碼,很多人可能就說了,這個代碼有問題啊,怎么可以將業(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
拆分為了IUserBo
和 IUserBiz
,然后讓IUserBiz
在適當時候去操作IUserBo
即可萍聊。
經(jīng)過上面的修改,我們就實現(xiàn)了兩個類的單一職責,也就是讓引起他們變化原因只有一種,并且讓相關性強的內容聚合在一個類內部。
三悦析、優(yōu)點
通過上面簡單的例子,我們來總結一下單一職責原則的優(yōu)點
1 . 類的復雜性降低,由于我們讓每個類的職責單一,這樣每個類職責清楚,定義明確
2 . 可讀性提高了,復雜性降低了,類更便于維護
3 . 變更的風險降低了,需求一直在變,使用單一職責,只需要修改一個接口及其實現(xiàn)類,對其他類和接口沒有影響
四寿桨、疑惑
看了上面的內容,可能有人覺得例子這么簡單,而且說了半天貌似只是接口職責單一,類的職責并不是單一的。對强戴,確實是這樣亭螟。
首先,對于職責的劃分這個是人為因素,可能每個人都有不同的看法,這種劃分沒有一個標準答案,因項目和環(huán)境而異。我們只需要盡量讓一個類的職責清楚,讓引起這個類變化的原因只有一個即可骑歹。但其實總是很難做到的,隨著項目經(jīng)驗的增加,可能才會讓我們設計的類越來越完善媒佣。我們要保證接口職責單一,類的職責盡量單一即可。