MST

星途 面试题库

面试题:Java中SOLID原则之单一职责原则的应用

请阐述在Java项目中如何应用单一职责原则(SRP),并举例说明在一个简单的Java类中,怎样通过拆分来遵循这一原则。
45.1万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

单一职责原则(SRP)阐述

单一职责原则是指一个类应该只有一个引起它变化的原因,即一个类只负责一项职责。在Java项目中应用SRP主要有以下几点:

  1. 职责明确:确保每个类的功能单一,避免一个类承担过多不同类型的任务。这样使得代码结构更加清晰,易于理解和维护。
  2. 降低耦合:当一个类职责过多时,修改其中一个功能可能会影响到其他功能,而SRP能减少这种耦合,使得各个功能模块之间相对独立,修改一个模块对其他模块的影响较小。
  3. 提高可维护性和扩展性:如果后续有新需求或需要修改某个功能,只需要关注负责该功能的类,而不需要在一个复杂的大类中到处寻找相关代码。

示例说明

假设我们有一个简单的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类中的用户信息保存功能。