From 8ce575f58606c65ce26ac539fdbadb63bd7a3037 Mon Sep 17 00:00:00 2001 From: Struchkov Mark Date: Sun, 6 Oct 2024 19:34:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D1=82=D0=B0=D1=82=D0=B8=D1=87=D0=B5?= =?UTF-8?q?=D1=81=D0=BA=D0=B0=D1=8F=20=D1=84=D0=B0=D0=B1=D1=80=D0=B8=D0=BA?= =?UTF-8?q?=D0=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev/java/Статическая фабрика в Java.md | 78 ++++++++++++++++++++++++++ dev/other/Статическая фабрика.md | 42 ++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 dev/java/Статическая фабрика в Java.md create mode 100644 dev/other/Статическая фабрика.md diff --git a/dev/java/Статическая фабрика в Java.md b/dev/java/Статическая фабрика в Java.md new file mode 100644 index 00000000..2c02028e --- /dev/null +++ b/dev/java/Статическая фабрика в Java.md @@ -0,0 +1,78 @@ +--- +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 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]] +**Автор**:: +### Дополнительные материалы +- + +### Дочерние заметки + + diff --git a/dev/other/Статическая фабрика.md b/dev/other/Статическая фабрика.md new file mode 100644 index 00000000..a6290073 --- /dev/null +++ b/dev/other/Статическая фабрика.md @@ -0,0 +1,42 @@ +--- +aliases: [] +tags: + - maturity/🌱 +date: 2024-10-06 +zero-link: +parents: +linked: +--- +Статическая фабрика — это метод, который создает и возвращает экземпляры класса, но вместо использования конструктора объект создается через статический метод. Основное отличие от конструктора заключается в том, что статическая фабрика предоставляет более гибкие возможности для создания объектов, включая возможность выбора имени метода, возврат кэшированных или предварительно созданных экземпляров и более точный контроль над процессом инициализации. + +Статическая фабрика работает через методы, которые вызываются на уровне класса (без необходимости создавать его экземпляр) и возвращают новый или уже существующий объект. Примером могут служить методы с осмысленными именами, такими как `of()`, `from()`, или `getInstance()`, которые четко указывают на логику создания. Такой подход позволяет скрывать реализацию, контролировать процесс создания объектов и даже возвращать кэшированные экземпляры. + +Преимущества статической фабрики: +- **Гибкость в именовании методов** — вместо ограничений конструктора можно создавать методы с наглядными названиями, которые лучше описывают процесс создания. +- **Контроль над процессом создания** — статическая фабрика может возвращать не только новые экземпляры, но и повторно использовать уже существующие, например, из пула объектов. +- Обеспечение [[../architecture/Инкапсуляция|инкапсуляции]] — можно скрыть детали реализации и даже сам конструктор, предоставляя более чистый интерфейс для пользователей класса. + +Однако у статической фабрики есть и недостатки: +- **Отсутствие наследования** — в отличие от обычных конструкторов, статические методы нельзя наследовать. +- **Ограниченность в динамическом создании объектов** — не всегда легко использовать в контексте рефлексии или динамической инициализации объектов. + +Реализации: +- [[../java/Статическая фабрика в Java|Статическая фабрика в Java]] + + +*** +## Мета информация +**Область**:: [[../../meta/zero/00 Разработка|00 Разработка]] +**Родитель**:: +**Источник**:: +**Создана**:: [[2024-10-06]] +**Автор**:: +### Дополнительные материалы +- + +### Дочерние заметки + + +- [[Статическая фабрика в Java]] + +