PHP

Шаблон проектирования Singleton (Одиночка) и его применение в php

В этой статье речь пойдет о шаблоне проектирования Одиночка (Singleton) и как этот паттерн применяется в php.

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

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

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

Как вариант можно создать глобальный объект и пользоваться только им, но ничто не защитит его от повторного создания, и пришедший в команду новый неопытный разработчик, пренебрегая соглашением об использовании глобального объекта, будет создавать дубликат столько раз, сколько ему захочется.
/*
* Класс для работы с базой данных mysql
*/
class MySql{
 
    private static $instance;
    /*
    * Так как у нас приватный конструтор, мы НЕ МОЖЕМ создать объект через new,
    * именно поэтому нам нужен статический метод instance, в нем создается объект,
    * НО только один раз.
    */  
    
	public static function instance() {
		if (self::$instance == null)
			//self::$instance = new MySql();	
			self::$instance = new self();	
		return self::$instance;
	}
    
    /*
    * Защита от дублирования
    */
    private function __clone() {}
    private function __wakeup() {} 
      
    /*
    * Защищаем вызов конструтора напрямую и создание объекта через new
    */
    private function __construct() {
      //соединение с базой и выбор базы данных .  Эти действия будут выполняться только один    раз
    }
}
Теги:
Singleton, Шаблон проектирования, Одиночка
Добавлено: 03 Апреля 2018 22:34:44 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...