一、什么是单一职责原则
单一职责原则(Single Responsibility Principle ):
就一个类而言,应该仅有一个引起它变化的 原因。
二、多功能的山寨手机
山寨手机的功能:
拍照、摄像、手机游戏、网络摄像头、GPS、炒股 等等。功能多、但是每一个功能都不强。 拍摄功能 ——专业摄像机或照相机 手机游戏 ——PSP 网络摄像头—-专业摄像头
GPS功能——专业GPS导航系统
三、烦人的山寨手机
每一个职责都是一个变化的轴线,当需求变化 时会反映为类的职责的变化。如果一个类承担的 职责多于一个,那么引起它变化的原因就有多个。
一个职责的变化甚至可能会削弱或者抑制类完成 其他职责的能力,从而导致脆弱的设计。
四、单一职责原则示例
接受客户端输入并提交到数据库。 原有设计:
一个类负责接受客户端输入,对客户端输入进 行校验,连接数据库,并提交数据到数据库。现有设计:
一个功能也就是一个职责由一个类来负责。
//示例程序:
import java.util.Scanner;
public class SaveToDB {
private String username;
private String upassword;
//获得客户端输入
public void inputDbUsernamePassword(){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户名:");
username = scanner.nextLine();
System.out.println("请输入密码:");
upassword = scanner.nextLine();
}
//进行数的居校验
public boolean validate(){
if(username == null || "".equals(username)) {
System.out.println("用户名不能为空");
return false;
}
if(upassword == null || "".equals(upassword)) {
System.out.println("密码不能为空");
return false;
}
return true;
}
//连接数据库
public void getConnection(){
System.out.println("获得数据库连接");
}
//进行数据操作
public void save(){
System.out.println("将" + username + "保存到了数据库");
System.out.println("将" + upassword + "保存到了数据库");
}
}
public class MainClass {
public static void main(String[] args) {
//接受客户端的输入
SaveToDB std = new SaveToDB();
std.inputDbUsernamePassword();
boolean validate = std.validate();
if(validate) {
std.getConnection();
std.save();
}
}
}
//请输入用户名:
//user
//请输入密码:
//123456
//获得数据库连接
//将user保存到了数据库
//将123456保存到了数据库
//示例2:
import java.util.Scanner;
public class Input {
private String username;
private String upassword;
//获得客户端输入
public void shuru() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户名");
username = scanner.nextLine();
System.out.println("请输入密码");
upassword = scanner.nextLine();
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUpassword() {
return upassword;
}
public void setUpassword(String upassword) {
this.upassword = upassword;
}
}
public class Validator {
//进行数据校验
public boolean validate(String username, String upassword) {
if(username == null || "".equals(username.trim())) {
System.out.println("用户名不能为空");
return false;
}
if(upassword == null || "".equals(upassword.trim())) {
System.out.println("密码不能为空");
return false;
}
return true;
}
}
public class DBManager {
//连接数据库
public static void getConnection() {
System.out.println("获得数据库连接");
}
}
public class DAOImp {
//进行数据操作
public void save(String username,String upassword) {
System.out.println("将" + username + "保存到了数据库");
System.out.println("将" + upassword + "保存到了数据库");
}
}