JavaScript

Реализация паттерн Singleton Java (Одиночка): подводные камни

Lorem ipsum dolor

Паттерн Синглтон — это один из самых известных паттернов в Java-программировании. Его изучают во всех курсах по обучению навыкам программирования на Java. Он имеет собственные достоинства и недостатки, но в целом, очень простой и удобный в использовании. Сегодня мы расскажем и покажем, что такое паттерн Singleton в Java.

Каждый паттерн — это типовой шаблон написания кода для решения типовой задачи. То есть в каждой программе применяются решения, которые используются и в других программах. Все похожие задачи в разных программах решаются похожим способом. Для того чтобы разные программисты не писали один и тот же код и не гадали как решить одну и ту же задачу в разных программах, придумали такое понятие как «паттерн». По сути, паттерн — это уже готовый шаблон-решение  проблемы, которая часто встречается в работе программистов. Применение паттерна ускоряет и упрощает разработку программ.

Конечно, можно самостоятельно решать задачи и не прибегать к применению паттернов. Начинающие разработчики так и делают. Но профессионалы поступают по-другому: если есть готовый паттерн решения их проблемы, они его применяют.  Нет смысла придумывать «колесо», когда уже давно придуман «велосипед». В общем, знание паттернов — это «ускорение» собственной работы и важное свойство для профессионального разработчика. Зная паттерны, не нужно объяснять другому профессионалу, какую задачу вам нужно было решить, потому что достаточно назвать только название паттерна.

Паттерн Синглтон

В Java существует очень много паттернов. Их столько, что их делят на категории. Например, есть такие категории:

  1. Порождающие паттерны. Это паттерны, которые отвечают за безопасное создание новых объектов и семейств объектов. Паттерн Синглтон  принадлежит к этой категории.

  2. Структурные паттерны. Эта категория паттернов отвечает за создание иерархий из классов.

  3. Поведенческие паттерны. Эта категория паттернов решает задачи эффективного и безопасного взаимодействия между объектами.

 Постепенно, в своих статьях мы затронем наиболее популярные паттерны из разных категорий. Сегодня мы разберем, что такое паттерн Singleton в Java.

Паттерн Singleton в Java

Как мы уже писали, паттерн Синглтон состоит в категории «порождающие паттерны». Его название дословно переводится как «одиночка», поэтому русскоязычные программисты его часто так и называют «паттерн Одиночка». По сути, паттерн Синглтон дает гарантию, что  классу соответствует единственный объект и к этому объекту можно получить доступ из любой точки программы.

Паттерн Singleton в Java используется в двух случаях:

  1. Если в программе нужно создать единственный объект для определенного класса. К примеру, вы разрабатываете игру. Там у вас будет класс «Игрок» и этот класс вы хотите описать единственным объектом.

  2. Если определенному объекту класса нужно задать глобальный доступ. Реализация такого действия через глобальную переменную не даст должного результата, потому что к такой переменной открыт доступ для кого угодно, а значит есть риск, что глобальная связь с объектом класса будет потеряна. А паттерн Singleton в Java гарантирует, что глобальный объект класса никем не будет изменен.

Если в вашей программе нужно решить одну из этих задач, тогда самое время воспользоваться паттерном Синглтон.

Паттерн Синглтон: пример кода

На самом деле, реализовать паттерн Singleton в Java вообще не сложно: нужно «убрать» стандартный конструктор построения объектов, а взамен обозначить новый способ, создающий объекты.

Вот как это выглядит в коде:

public start class mySingleton {

 

    private static mySingleton example;

    public String values;

 

    private mySingleton(String values) {

        // запускаем эмуляцию замедленной инициализации, что это такое, обсудим чуть ниже.

        try {

            Thread.sleep(2000);

        } catch (InterruptedException ex) {

            ex.printStackTrace();

        }

        this.values = values;

    }

 

    public static mySingleton getExample(String values) {

        if (example == null) {

            example = new mySingleton(values);

        }

        return example;

    }

}

 

Паттерн Синглтон и другие языки программирования

Паттерн Синглтон часто реализуется с «ленивой инициализацией». «Ленивая инициализация» это прием в программировании, при котором операции, требующие много ресурсов, выполняются по требованию и не заранее. Создание нового объекта в паттерне Синглтон — это операция, на которую необходимо много ресурсов.

Паттерн  Синглтон применяется не только в Java. Он часто используется и на других языках программирования. Например, на:

  • C#;

  • C++;

  • C;

  • PHP;

  • Python;

  • Ruby;

  • Swift;

  • TypeScript;

  • Go;

  • и др.

Заключение

Паттерн  Синглтон — это довольно популярный шаблон программирования. Он часто применяется из-за своей легкости и эффективности по сравнению с глобальными переменными. Паттерн  Синглтон  и глобальные переменные имеют похожие преимущества и недостатки. Главное отличие между ними — паттерн  Синглтон гарантирует, что никто не вмешается в работу созданного глобального объекта класса, а глобальные переменные не гарантируют.

Схожие статьи

Модули чисел в JavaScript и Node.js и правила работы с ними
JavaScript

Модули чисел в JavaScript и Node.js и правила работы с ними

Учебный курс по React, часть 2: функциональные компоненты
JavaScript

Учебный курс по React, часть 2: функциональные компоненты

Учебный курс по React, часть 4: родительские и дочерние компоненты
JavaScript

Учебный курс по React, часть 4: родительские и дочерние компоненты

Учебный курс по React, часть 9: свойства компонентов
JavaScript

Учебный курс по React, часть 9: свойства компонентов

×