Java Effective Essentials — Singleton


Реализуйте свойство синглтона с помощью частного конструктора или типа перечисления

Это серия, основанная на понимании тем, связанных с книгой, с упором на аннотацию.

Понимание…

Синглтон — это шаблон проектирования, используемый для инстанцирования класса только один раз в течение жизненного цикла приложения.
Примерами синглтонных объектов, которые мы ежедневно используем в 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.

Оцените статью
devanswers.ru
Добавить комментарий