2單一職責原則SRP
阿新 • • 發佈:2018-05-14
客戶 AS == password connect pre ons 不能 validate
一、什麽是單一職責原則
單一職責原則(Single Responsibility Principle ): 就一個類而言,應該僅有一個引起它變化的 原因。
二、多功能的山寨手機
山寨手機的功能: 拍照、攝像、手機遊戲、網絡攝像頭、GPS、炒股 等等。
功能多、但是每一個功能都不強。
拍攝功能 ------>專業攝像機或照相機
手機遊戲 ------>PSP
網絡攝像頭---->專業攝像頭
GPS功能------>專業GPS導航系統
三、煩人的山寨手機
每一個職責都是一個變化的軸線,當需求變化 時會反映為類的職責的變化。如果一個類承擔的 職責多於一個,那麽引起它變化的原因就有多個。 一個職責的變化甚至可能會削弱或者抑制類完成 其他職責的能力,從而導致脆弱的設計。
四、單一職責原則示例
接受客戶端輸入並提交到數據庫。
原有設計: 一個類負責接受客戶端輸入,對客戶端輸入進 行校驗,連接數據庫,並提交數據到數據庫。
現有設計: 一個功能也就是一個職責由一個類來負責。
原有設計:
1 import java.util.Scanner; 2 3 public class SaveToDB { 4 private String username; 5 private String upassword; 6 7 //獲得客戶端輸入 8 public voidshuru() { 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 }
2單一職責原則SRP