Реализуйте свойство синглтона с помощью частного конструктора или типа перечисления
Это серия, основанная на понимании тем, связанных с книгой, с упором на аннотацию.
Понимание…
Синглтон — это шаблон проектирования, используемый для инстанцирования класса только один раз в течение жизненного цикла приложения.
Примерами синглтонных объектов, которые мы ежедневно используем в Java-приложениях, являются Enum и Spring’s Beans, которые по умолчанию создаются как синглтонные.
Синглтоны представляют собой объект без статического состояния в приложении, с функцией выполнения задач/функций.
Как?
Два наиболее распространенных способа создания Singleton включают в себя сохранение его конструктора приватным и размещение его атрибутов как public static, чтобы обеспечить доступ к единственному экземпляру.
Пример A
public class CalculadoraDeMateriais {
public static final CalculadoraDeMateriais INSTANCE = new CalculadoraDeMateriais();
private CalculadoraDeMateriais() {
}
}
Внимание
Хотя в примере A мы гарантируем, что вызывается только один экземпляр, клиент с привилегиями может использовать метод AccessibleObject.setAccessible для доступа к частному конструктору, поэтому, чтобы избежать этой возможности, мы используем пример B, где мы гарантируем, что если экземпляр уже существует, то будет выброшено исключение.
Пример B
public class CalculadoraDeMateriais {
private static final CalculadoraDeMateriais INSTANCE=
new CalculadoraDeMateriais();
private CalculadoraDeMateriais() {
if (INSTANCE != null) {
throw new IllegalStateException();
}
}
public static CalculadoraDeMateriais getInstance() {
return INSTANCE;
}
}
Дополнительная информация…
- Подход с использованием публичного поля дает понять, что объект является синглтоном.
- Мы можем использовать его вместе со статической фабрикой, так как это обеспечивает гибкость в будущем, если мы больше не хотим, чтобы он был синглтоном.
- Но в большинстве случаев, когда мы хотим использовать объект как синглтон, мы можем использовать Enums — классы, которые имеют атрибуты и методы и имеют один экземпляр во время выполнения.
- Использование Singleton, как показано в примерах выше, в настоящее время необычно и сложнее для тестирования.
- Когда мы говорим об использовании, например, Spring Beans, которые по умолчанию создаются с областью видимости Singleton, мы можем проверить это.
- Более распространенные случаи, которые мы используем в нашем коде сегодня и которые работают очень хорошо, — это Enums.