Singleton гарантирует, что у класса есть только один экземпляр и предоставляет к нему глобальную точкудоступа (обычно статический метод).
Singleton реализует инициализацию по необходимости ("just-in-time initialization") или инициализацию припервом обращении ("initialization on first use").
Цель
Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.Существенно то, что можно пользоваться именно экземпляром класса, так как при этом во многих случаяхстановится доступной более широкая функциональность. Например, к описанным компонентам класса можнообращаться через интерфейс, если такая возможность поддерживается языком.
Плюсы
- контролируемый доступ к единственному экземпляру;
- уменьшение числа имён;
- допускает уточнение операций и представления;
- допускает переменное число экземпляров;
- большая гибкость, чем у операций класса.
Минусы
- глобальные объекты могут быть вредны для объектного программирования, в некоторых случаях приводя ксозданию немасштабируемого проекта.
- усложняет написание модульных тестов и следование TDD
Применение
- должен быть ровно один экземпляр некоторого класса, легко доступный всем клиентам;
- единственный экземпляр должен расширяться путем порождения подклассов, и клиентам нужно иметьвозможность работать с расширенным экземпляром без модификации своего кода.
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();