Паттерн Синглтон — это один из самых известных паттернов в Java-программировании. Его изучают во всех курсах по обучению навыкам программирования на Java. Он имеет собственные достоинства и недостатки, но в целом, очень простой и удобный в использовании. Сегодня мы расскажем и покажем, что такое паттерн Singleton в Java.
Каждый паттерн — это типовой шаблон написания кода для решения типовой задачи. То есть в каждой программе применяются решения, которые используются и в других программах. Все похожие задачи в разных программах решаются похожим способом. Для того чтобы разные программисты не писали один и тот же код и не гадали как решить одну и ту же задачу в разных программах, придумали такое понятие как «паттерн». По сути, паттерн — это уже готовый шаблон-решение проблемы, которая часто встречается в работе программистов. Применение паттерна ускоряет и упрощает разработку программ.
Конечно, можно самостоятельно решать задачи и не прибегать к применению паттернов. Начинающие разработчики так и делают. Но профессионалы поступают по-другому: если есть готовый паттерн решения их проблемы, они его применяют. Нет смысла придумывать «колесо», когда уже давно придуман «велосипед». В общем, знание паттернов — это «ускорение» собственной работы и важное свойство для профессионального разработчика. Зная паттерны, не нужно объяснять другому профессионалу, какую задачу вам нужно было решить, потому что достаточно назвать только название паттерна.
Паттерн Синглтон
В Java существует очень много паттернов. Их столько, что их делят на категории. Например, есть такие категории:
Порождающие паттерны. Это паттерны, которые отвечают за безопасное создание новых объектов и семейств объектов. Паттерн Синглтон принадлежит к этой категории.
Структурные паттерны. Эта категория паттернов отвечает за создание иерархий из классов.
Поведенческие паттерны. Эта категория паттернов решает задачи эффективного и безопасного взаимодействия между объектами.
Постепенно, в своих статьях мы затронем наиболее популярные паттерны из разных категорий. Сегодня мы разберем, что такое паттерн Singleton в Java.
Паттерн Singleton в Java
Как мы уже писали, паттерн Синглтон состоит в категории «порождающие паттерны». Его название дословно переводится как «одиночка», поэтому русскоязычные программисты его часто так и называют — «паттерн Одиночка». По сути, паттерн Синглтон дает гарантию, что классу соответствует единственный объект и к этому объекту можно получить доступ из любой точки программы.
Паттерн Singleton в Java используется в двух случаях:
Если в программе нужно создать единственный объект для определенного класса. К примеру, вы разрабатываете игру. Там у вас будет класс «Игрок» и этот класс вы хотите описать единственным объектом.
Если определенному объекту класса нужно задать глобальный доступ. Реализация такого действия через глобальную переменную не даст должного результата, потому что к такой переменной открыт доступ для кого угодно, а значит есть риск, что глобальная связь с объектом класса будет потеряна. А паттерн 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