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 }