НЕ МОЛЧИ!!!    Сделай что-нибудь, чтобы остановить войну России в Украине.
Иначе завтра ТЫ будешь следующим!

Шаблон проектирования Одиночка

Представлен шаблон проектирования Одиночка или Singleton, приводится описание шаблона с примером его реализации.

Описание шаблона Одиночка

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

Небольшое примечание. Как известно, глобальные переменные в программе это зло, поэтому многие считают этот шаблон антипаттерном, тем не менее, встречаются ситуации, когда он востребован.

Пример реализации шаблона Одиночка

class Singleton
{
  private static $instance = null;

  private function __construct() { }	//закрываем конструктор

  private function __clone() { }	//закрываем возможность клонирования объекта

  private function __wakeup() { }	//закрываем возможность десериализации объекта

  public static function getInstance()
  {
    if (!isset(self::$instance)) {
      self::$instance = new self();
    }
    return self::$instance
  }
  //одна из ф-ций объекта реализации бизнес-логики
  public function handle1()
  {
	// ...  
  }
}

Для тестирования паттерна создадим коротенький скрипт, допустим index.php .

/**
 * тестируем работу шаблона Одиночка
 */
function testSingleton()
{
    $s1 = Singleton::getInstance();
    $s2 = Singleton::getInstance();
    if ($s1 === $s2) {
        echo "Объекты идентичны - шаблон Одиночка работает!";
    } else {
        echo "Неточность в работе шаблона Одиночка";
    }
}
echo testSingleton();

При запросе тестового скрипта, в браузере мы увидим

Объекты идентичны - шаблон Одиночка работает!

Перейти к списку шаблонов проектирования.