Покажите на пальцах для чего нужен Singleton?
class Singleton {
protected static $instance; // object instance
/**
* Защищаем от создания через new Singleton
*
* @return Singleton
*/
private function __construct() { /* ... */ }
/**
* Защищаем от создания через клонирование
*
* @return Singleton
*/
private function __clone() { /* ... */ }
/**
* Защищаем от создания через unserialize
*
* @return Singleton
*/
private function __wakeup() { /* ... */ }
/**
* Возвращает единственный экземпляр класса
*
* @return Singleton
*/
public static function getInstance() {
if ( is_null(self::$instance) ) {
self::$instance = new Singleton;
}
return self::$instance;
}
public function doAction() { /* ... */ }
}
//usage
Singleton::getInstance()->doAction();
Для чего писать так? Если можно написать вот так:
class Singleton {
public static function doAction() { /* ... */ }
}
Singleton::doAction();
Не проще, нет? %)
Только не нужно давать ссылок на википедию и т.п.
Всем спасибо! @knes, @ikoolik и @Nord001 — накинул вам по 25 очков за старание.
Ответ
Синглтон нужен, чтобы точно знать, что у нас создан ОДИН объект данного класса. Классический пример - коннект к базе данных.
Если куча скриптов внутри одного файла теребит БД в разных функциях, приходится заводить глобальную переменную соединения и постоянно проверять жива ли она, на случай если в данный момент идет первое подключение к БД.
Синглтон же сам создает соединение, если оно еще не было установлено, либо просто возвращает готовую ссылку. Вам же требуется только вызвать его, уже ни о чем не заботясь: лишний раз базу не потревожат.
Второй ваш пример плох тем, что можно насоздавать кучу объектов данного класса, которые не будут знать что происходит у остальных.
Комментариев нет:
Отправить комментарий