Singleton (Синглтон)
Войти

Singleton (Синглтон)

Singleton (Синглтон)

Синглтон(Singleton) - это класс, для которого можно создать только один экземпляр.

Singleton – это обычный php класс, в логику работы которого включена проверка на эксклюзивность его создания. Т.е. объект класса, построенный по шаблону синглтона, может быть создан лишь один раз. Все будущие попытки обратиться к его методу или свойству, создав новый объект, будут нейтрализованы логикой его работы и перенаправлены на уже имеющийся экземпляр.

Таким образом, класс, построенный по принципу синглтона, будет защищен от многочисленного создания и дублирования действий при интерпретации кода.

Представим, что у нас есть класс, инициализирующий какие либо настройки. Для инициализации он может считывать информацию из текстовых файлов и/или таблиц БД.

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

В ходе работы системы, проведение таких операций может потребоваться очень часто, и каждый раз будет создаваться новый экземпляр класса, а соответственно будет дублироваться работа по сбору настроек из БД и файлов, что не очень лестно скажется на работе всей системы.

Как вариант можно создать глобальный объект и пользоваться только им, но ничто не защитит его от повторного создания, и пришедший в команду новый неопытный разработчик, пренебрегая соглашением об использовании глобального объекта, будет создавать дубликат столько раз, сколько ему захочется.

Решением этой проблемы как раз и занимается шаблон Singleton. Обычный пример PHP Singleton

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

Недостатки синглтона

Далеко не всегда бывает достаточно лишь одного экземпляра класса (например может казаться, что одного подключения к базе данных достаточно, но все меняется и со временем может потребоваться доступ нескольким базам данных - возможно для бэкапа или синхронизации).

Класс, использующий синглтон, не объявляет зависимость от этого синглтона. Поэтому неочевидно, что он использует синглтон и это создает сильную связь между ними

Наследование и полиморфизм ограничены, так как все еще может быть только один экземпляр на запрос (но реализация может быть разной для разных типов запросов)

Однажды созданный синглтон будет занимать место в памяти в течении всего запроса, даже если он уже не нужен (это свойственно для объектов, которые дорого создавать и/или который используются часто, но могут негативно воздействовать на память если используются без разбора)

Теги:
php