Представлен шаблон проектирования Одиночка или 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();
При запросе тестового скрипта, в браузере мы увидим
Объекты идентичны - шаблон Одиночка работает!
Перейти к списку шаблонов проектирования.