Если объект дорогой в создании, но нужен только в редких сценариях, eager initialization может зря тратить время и память.
Вместо этого используйте lazy initialization:
private HeavyAnalyzer analyzer;
private HeavyAnalyzer analyzer() {
if (analyzer == null) {
analyzer = new HeavyAnalyzer();
}
return analyzer;
}
Так HeavyAnalyzer создастся только при первом реальном обращении.
Где особенно полезно:
- кэши;
- API-клиенты;
- тяжёлая конфигурация;
- анализаторы;
- объекты с дорогой инициализацией.
Для более чистого кода можно использовать Supplier, holder pattern или современные lazy-механизмы Java.
Если доступ идёт из нескольких потоков, простая проверка if (analyzer == null) уже недостаточна - нужна потокобезопасная реализация.
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪
