digital-garden/dev/java/Статическая фабрика в Java.md
Struchkov Mark 320a20c2b4
Some checks failed
continuous-integration/drone/push Build is failing
Обновление
2024-11-24 11:44:57 +03:00

79 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
aliases:
tags:
- maturity/🌱
date: 2024-10-06
zero-link:
parents:
linked:
---
[[../other/Статическая фабрика|Статическая фабрика]] в Java — это метод, который возвращает экземпляры класса, но вместо создания объектов через конструктор, используется статический метод. Такой подход дает разработчику гибкость в процессе создания объектов, возможность кэширования и возвращения уже созданных экземпляров, а также улучшает [[../Читаемый код|читаемость кода]] за счет осмысленных имен методов, таких как `of()` или `valueOf()`.
Статическая фабрика часто используется для реализации паттернов, таких как Singleton, а также для создания объектов, требующих дополнительной логики при инициализации.
Рассмотрим простой пример создания объекта с помощью статической фабрики:
```java
public class Foo {
private int value;
// Приватный конструктор
private Foo(int value) {
this.value = value;
}
// Статический фабричный метод
public static Foo of(int value) {
return new Foo(value);
}
// Другой статический метод
public static Foo doubleCreate(int value) {
return new Foo(value * value);
}
}
```
Здесь конструктор класса `Foo` является приватным, и доступ к нему осуществляется через два статических метода: `of()` для простого создания объекта и `doubleCreate()`, который создает объект с модифицированным значением.
Теперь рассмотрим пример с кэшированием, чтобы избежать создания новых объектов при одинаковых параметрах:
```java
import java.util.HashMap;
import java.util.Map;
public class Foo {
private static final Map<Integer, Foo> cache = new HashMap<>();
private int value;
private Foo(int value) {
this.value = value;
}
// Статический фабричный метод с кэшированием
public static Foo of(int value) {
if (!cache.containsKey(value)) {
cache.put(value, new Foo(value));
}
return cache.get(value);
}
}
```
В этом примере используется кэширование: если объект с определенным значением уже был создан, статическая фабрика возвращает его из кэша, а если нет — создает новый и сохраняет его для дальнейшего использования.
***
## Мета информация
**Область**:: [[../../meta/zero/00 Java разработка|00 Java разработка]]
**Родитель**:: [[../other/Статическая фабрика|Статическая фабрика]]
**Источник**::
**Создана**:: [[2024-10-06]]
**Автор**::
### Дополнительные материалы
-
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->