Паттерн проектирования Singleton (Одиночка) на PHP

Singleton гарантирует, что у класса есть только один экземпляр и предоставляет к нему глобальную точкудоступа (обычно статический метод).

Singleton реализует инициализацию по необходимости ("just-in-time initialization") или инициализацию припервом обращении ("initialization on first use").


Цель

Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.Существенно то, что можно пользоваться именно экземпляром класса, так как при этом во многих случаяхстановится доступной более широкая функциональность. Например, к описанным компонентам класса можнообращаться через интерфейс, если такая возможность поддерживается языком.


Плюсы

  • контролируемый доступ к единственному экземпляру;
  • уменьшение числа имён;
  • допускает уточнение операций и представления;
  • допускает переменное число экземпляров;
  • большая гибкость, чем у операций класса.

Минусы

  • глобальные объекты могут быть вредны для объектного программирования, в некоторых случаях приводя ксозданию немасштабируемого проекта.
  • усложняет написание модульных тестов и следование TDD

Применение

  • должен быть ровно один экземпляр некоторого класса, легко доступный всем клиентам;
  • единственный экземпляр должен расширяться путем порождения подклассов, и клиентам нужно иметьвозможность работать с расширенным экземпляром без модификации своего кода.

Паттерн проектирования Singleton (Одиночка) на PHP

 1: <?php
 2:
 3:
class Singleton
 4:
// object instance
 5:     
protected static $instance;
 6:
 7:     private function 
__construct()
 8:     {
 9:     }
10:
11:     private function 
__clone()
12:     {
13:     }
14:
15:     private function 
__wakeup()
16:     {
17:     }
18:
19:     public static function 
getInstance()
20:     {
21:         if (
is_null(self::$instance)) {
22:             
self::$instance = new self;
23:         }
24:         return 
self::$instance;
25:     }
26:
27:     public function 
doAction()
28:     {
29:         
/* ... */
30:     
}
31: }
32:
33:
Singleton::getInstance()->doAction();

Теги: Шаблон одиночка, Singleton, Порождающие шаблоны


Похожие статьи

Паттерн проектирования Multiton (Пул одиночек) на PHP

Паттерн проектирования Prototype (Прототип) на PHP

Паттерн проектирования Lazy initialization (Отложенная инициализация) на PHP

Паттерн проектирования Abstract Factory (Абстрактная фабрика) на PHP

Паттерн проектирования Object pool (Объектный пул) на PHP

Паттерн проектирования Factory Method (Фабричный метод) на PHP

Паттерн проектирования Builder (Строитель) на PHP

Паттерн проектирования Resource Acquisition Is Initialization - RAII (Получение ресурса есть инициализация) на PHP