Ответ
Классическая реализация паттерна Singleton нарушает принцип единственной ответственности (Single Responsibility Principle, SRP), так как сочетает в себе две ответственности:
- Управление жизненным циклом собственного экземпляра (гарантия существования не более одного объекта и контроль точки доступа к нему).
- Выполнение основной бизнес-логики, для которой класс был создан.
Пример нарушения SRP:
public class DatabaseConnection {
// Ответственность 1: Управление экземпляром
private static DatabaseConnection instance;
private DatabaseConnection() {}
public static DatabaseConnection getInstance() {
if (instance == null) {
instance = new DatabaseConnection();
}
return instance;
}
// Ответственность 2: Основная бизнес-логика
public void connect() { /* ... */ }
public void executeQuery(String query) { /* ... */ }
}
Как улучшить (следовать SRP):
- Вынести управление экземпляром во внешний компонент (например, использовать Dependency Injection Container).
- Сделать класс
DatabaseConnectionобычным классом, а контроль за количеством его экземпляров возложить на контейнер внедрения зависимостей. Это упрощает тестирование и делает систему более гибкой.