Паттерн Singleton предназначен для обеспечения того, чтобы класс имел только один экземпляр и предоставлял к нему глобальную точку доступа. Это особенно полезно, когда нужен точно один экземпляр класса, чтобы координировать действия по всему приложению. Например, это может быть соединение с базой данных или менеджер конфигурации.
Суть Singleton в том, что у него закрытый конструктор (чтобы нельзя было создать экземпляр класса стандартным способом), статическая переменная, которая хранит экземпляр класса, и статический метод, который возвращает этот экземпляр. Если экземпляр класса уже создан, он просто возвращается; если нет — сначала создается, а потом возвращается.
Простой пример реализации паттерна Singleton на PHP:
class DatabaseConnector
{
private static $instance = null;
private function __construct()
{
# Здесь может быть код инициализации соединения с базой данных
}
public static function getInstance()
{
if( self::$instance === null )
{
self::$instance = new DatabaseConnector();
}
return self::$instance;
}
private function __clone()
{
# Защита от клонирования
}
private function __wakeup()
{
# Защита от десериализации
}
}
Использовать Singleton можно так:
$db = DatabaseConnector::getInstance();
Этот код гарантирует, что независимо от того, сколько раз вы попытаетесь получить экземпляр класса DatabaseConnector, будет использоваться только один и тот же экземпляр.
Использование Singleton может усложнить тестирование кода, так как он вносит глобальное состояние в приложение, и его часто критикуют за это. Поэтому стоит внимательно подходить к решению о применении этого паттерна.
Комментарии
0Нашли ошибку или хотите дополнить материал?