面试题答案
一键面试单一职责原则(SRP)阐述
单一职责原则是指一个类应该只有一个引起它变化的原因,即一个类只负责一项职责。在Java项目中应用SRP主要有以下几点:
- 职责明确:确保每个类的功能单一,避免一个类承担过多不同类型的任务。这样使得代码结构更加清晰,易于理解和维护。
- 降低耦合:当一个类职责过多时,修改其中一个功能可能会影响到其他功能,而SRP能减少这种耦合,使得各个功能模块之间相对独立,修改一个模块对其他模块的影响较小。
- 提高可维护性和扩展性:如果后续有新需求或需要修改某个功能,只需要关注负责该功能的类,而不需要在一个复杂的大类中到处寻找相关代码。
示例说明
假设我们有一个简单的Java类UserService
,一开始它承担了用户信息管理和用户登录验证两项职责,如下:
public class UserService {
// 保存用户信息
public void saveUser(String username, String password) {
// 实际保存逻辑,例如写入数据库
System.out.println("Saving user " + username + " with password " + password);
}
// 验证用户登录
public boolean validateLogin(String username, String password) {
// 实际验证逻辑,例如查询数据库对比用户名和密码
return "admin".equals(username) && "123456".equals(password);
}
}
这个类违反了单一职责原则,因为它有两个不同的职责:用户信息管理和用户登录验证。我们可以通过拆分来遵循这一原则:
- 拆分出用户信息管理类
public class UserInfoService {
public void saveUser(String username, String password) {
// 实际保存逻辑,例如写入数据库
System.out.println("Saving user " + username + " with password " + password);
}
}
- 拆分出用户登录验证类
public class UserLoginService {
public boolean validateLogin(String username, String password) {
// 实际验证逻辑,例如查询数据库对比用户名和密码
return "admin".equals(username) && "123456".equals(password);
}
}
这样拆分后,每个类都只负责一项职责,符合单一职责原则,代码更易于维护和扩展。例如,如果要修改用户登录验证逻辑,只需要在UserLoginService
类中修改,而不会影响到UserInfoService
类中的用户信息保存功能。