1、什麼是單一職責原則java
單一職責原則(Single Responsibility Principle ): 就一個類而言,應該僅有一個引發它變化的 緣由。數據庫
2、多功能的山寨手機網絡
山寨手機的功能: 拍照、攝像、手機遊戲、網絡攝像頭、GPS、炒股 等等。測試
功能多、可是每個功能都不強。this
拍攝功能 ------>專業攝像機或照相機spa
手機遊戲 ------>PSP設計
網絡攝像頭---->專業攝像頭code
GPS功能------>專業GPS導航系統blog
3、煩人的山寨手機遊戲
每個職責都是一個變化的軸線,當需求變化 時會反映爲類的職責的變化。若是一個類承擔的 職責多於一個,那麼引發它變化的緣由就有多個。 一個職責的變化甚至可能會削弱或者抑制類完成 其餘職責的能力,從而致使脆弱的設計。
4、單一職責原則示例
接受客戶端輸入並提交到數據庫。
原有設計: 一個類負責接受客戶端輸入,對客戶端輸入進 行校驗,鏈接數據庫,並提交數據到數據庫。
現有設計: 一個功能也就是一個職責由一個類來負責。
原有設計:
1 import java.util.Scanner; 2 3 public class SaveToDB { 4 private String username; 5 private String upassword; 6 7 //得到客戶端輸入 8 public void shuru() { 9 Scanner scanner = new Scanner(System.in); 10 System.out.println("請輸入用戶名"); 11 username = scanner.nextLine(); 12 System.out.println("請輸入密碼"); 13 upassword = scanner.nextLine(); 14 } 15 16 //進行數據校驗 17 public boolean validate() { 18 if(username == null || "".equals(username.trim())) { 19 System.out.println("用戶名不能爲空"); 20 return false; 21 } 22 if(upassword == null || "".equals(upassword.trim())) { 23 System.out.println("密碼不能爲空"); 24 return false; 25 } 26 return true; 27 } 28 29 //鏈接數據庫 30 public void getConnection() { 31 System.out.println("得到數據庫鏈接"); 32 } 33 34 //進行數據操做 35 public void save() { 36 System.out.println("將" + username + "保存到了數據庫"); 37 System.out.println("將" + upassword + "保存到了數據庫"); 38 } 39 }
測試
1 public class MainClass { 2 public static void main(String[] args) { 3 //接受客戶端的輸入 4 SaveToDB std = new SaveToDB(); 5 std.shuru(); 6 if(std.validate()) { 7 std.getConnection(); 8 std.save(); 9 } 10 } 11 }
==========================================================================
現有設計:
客戶端輸入
1 import java.util.Scanner; 2 3 public class Input { 4 private String username; 5 private String upassword; 6 7 //得到客戶端輸入 8 public void shuru() { 9 Scanner scanner = new Scanner(System.in); 10 System.out.println("請輸入用戶名"); 11 username = scanner.nextLine(); 12 System.out.println("請輸入密碼"); 13 upassword = scanner.nextLine(); 14 } 15 16 public String getUsername() { 17 return username; 18 } 19 20 public void setUsername(String username) { 21 this.username = username; 22 } 23 24 public String getUpassword() { 25 return upassword; 26 } 27 28 public void setUpassword(String upassword) { 29 this.upassword = upassword; 30 } 31 }
數據操做
1 public class DAOImp { 2 //進行數據操做 3 public void save(String username,String upassword) { 4 System.out.println("將" + username + "保存到了數據庫"); 5 System.out.println("將" + upassword + "保存到了數據庫"); 6 } 7 }
鏈接數據庫
1 public class DBManager { 2 //鏈接數據庫 3 public static void getConnection() { 4 System.out.println("得到數據庫鏈接"); 5 } 6 }
數據校驗
1 public class Validator { 2 //進行數據校驗 3 public boolean validate(String username, String upassword) { 4 if(username == null || "".equals(username.trim())) { 5 System.out.println("用戶名不能爲空"); 6 return false; 7 } 8 if(upassword == null || "".equals(upassword.trim())) { 9 System.out.println("密碼不能爲空"); 10 return false; 11 } 12 return true; 13 } 14 }
測試
1 public class MainClass { 2 public static void main(String[] args) { 3 Input input = new Input(); 4 input.shuru(); 5 Validator validator = new Validator(); 6 if(validator.validate(input.getUsername(), input.getUpassword())){ 7 DBManager.getConnection(); 8 DAOImp dao = new DAOImp(); 9 dao.save(input.getUsername(), input.getUpassword()); 10 } 11 } 12 }