PHP: Паттерн Одиночка (Singleton)
Паттерн 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 может усложнить тестирование кода, так как он вносит глобальное состояние в приложение, и его часто критикуют за это. Поэтому стоит внимательно подходить к решению о применении этого паттерна.
Комментарии