Объясни принцип единственной ответственности (Single Responsibility Principle) из SOLID.

«Объясни принцип единственной ответственности (Single Responsibility Principle) из SOLID.» — вопрос из категории ООП, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Принцип единственной ответственности (SRP) гласит: класс должен иметь одну и только одну причину для изменения, то есть отвечать за одну задачу или функциональность.

Пример нарушения SRP:

class Report {
    public String generateReport(String data) {
        // Логика генерации отчета
        return "Report: " + data;
    }

    public void saveReportToFile(String report, String filename) {
        // Логика сохранения в файл
        System.out.println("Saving report to " + filename);
    }
}

Этот класс нарушает SRP, так как совмещает две ответственности: генерацию бизнес-логики отчета и работу с файловой системой.

Пример с соблюдением SRP:

// Класс отвечает только за генерацию отчета
class ReportGenerator {
    public String generate(String data) {
        return "Report: " + data;
    }
}

// Класс отвечает только за сохранение данных
class FileSaver {
    public void save(String content, String filename) {
        System.out.println("Saving to " + filename);
    }
}

Преимущества:

  • Код становится проще тестировать и поддерживать.
  • Изменения в логике сохранения не затрагивают логику генерации отчета, и наоборот.
  • Повышается переиспользуемость компонентов.