79 lines
3.7 KiB
Markdown
79 lines
3.7 KiB
Markdown
---
|
||
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) -->
|
||
|