2單一職責原則SRP

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 }
相關文章
相關標籤/搜索