設計模式六大原則---單一職責原則
背景
隨著科技的進步手機的功能越來越多,效果也越來越好;但是攝影愛好者們用的還是單反,記者采訪時用的還是錄音筆,商務辦公時用得多的還是電腦。。。也許你可以說有一天手機可能會取代它們,但是你不可否認的是大多數時候一件產品簡單點,職責單一些或許是更好的選擇。
概述
單一職責原則(Single Responsibility Principle,SRP)是設計模式六大設計原則中的第一個。所謂職責是指類變化的原因。軟件設計真正要做的許多內容就是發現職責並把那些職責相互分離。如果一個類有多於一個的動機被改變,那麼這個類有多於一個的職責。而單一職責原則指的是,就一個類而言,應該僅有一個引起它變化的原因。
問題由來
如果一個類的職責過多,就等於把這些職責耦合在一起,一個職責的變化可能會削弱或則抑製這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當變化發生時,設計會糟到意想不到的破壞。
類P有兩個不同的職責,T1和T2。當由於職責T1發生變化時,需要修改類P時可能是原本正常的職責T2的功能發生故障。
這時我們就應該遵循單一職責原則,建立兩個不同的類分別負責T1和T1兩個職責,這樣我們修改其中一個時另一個就能避免發生功能故障。
舉例說明
下麵以一個用戶管理為例演示單一職責原則。在業務邏輯層上定義類UserManager,在數據訪問層定義類UserDao,在實體對象層定義類User,每個類具有不同的職責和功能。
public class User { private String username; private String userpass; private int role; //………….各個屬性的get、set方法 } public class UserDao extends BaseDao { //返回所有用戶 public List<User> getAllUser() { List<User> userList = new ArrayList<User>(); ......//訪問數據庫 return userList; } //根據用戶名查找用戶 public User getUserByName(String name) { User user=null; String sql="SELECT * FROM userdetail WHERE username=?"; ...//查找相應用戶名的用戶 return user; } //添加新用戶 public boolean addUser(User user) { //返回true 表示成功 } } public class UserManager { private UserDao userDao = new UserDao(); //驗證用戶名和密碼 public boolean CheckUser(String name,String pass) { boolean flag=false; User user =userDao.getUserByName(name); if(user!=null&&user.getUsername().equals(pass)) { flag=true; } return flag; } //注冊新用戶 public void registUser(User user) { if(userDao.getUserByName(user.getUsername()) !=null) { System.out.println("用戶名已存在"); return; } if(UserDao.addUser(user)) { //注冊成功 }else { //注冊失敗 } } }(示例from:https://wenku.baidu.com/view/d9459cabb0717fd5360cdcc3.html)
優點
降低類的複雜度,提高類的可讀性,提高係統的可維護性;使代碼真正的易維護、易擴展、易複用、靈活多樣。
最後更新:2017-04-03 12:55:00