L!MP (24.12.2011/22:02)Приведу простой пример.
Почти любую задачу можно решить нескольками методами и оценка их эффективности может быть понятием субьективным.
Кпримеру, запрос к приложению (или ответ от приложения).
Он может быть только один в
Одной из вроде бы очевидных целей для синглтона - это Registry
Вот, глянь как реализован Registry в mobiCMS (даю урезанную версию, но суть видна).
/**
* @package mobiCMS
* @copyright Copyright (C) 2007-2012 mobiCMS team
* @license LICENSE.txt (own license, see attached file)
* @version VERSION.txt (see attached file)
* @link http://mobicms.org
*/
class Registry extends ArrayObject
{
private static $_registry = null;
public function __construct($array = array(), $flags = parent::ARRAY_AS_PROPS)
{
parent::__construct($array, $flags);
}
public static function getInstance()
{
if (self::$_registry === null) {
self::$_registry = new Registry;
}
return self::$_registry;
}
public static function get($index)
{
$instance = self::getInstance();
if (!$instance->offsetExists($index)) {
throw new RuntimeException("No entry is registered for key '$index'");
}
return $instance->offsetGet($index);
}
public static function set($index, $value)
{
$instance = self::getInstance();
$instance->offsetSet($index, $value);
}
public function offsetExists($index)
{
return array_key_exists($index, $this);
}
}Там может с первого взгляда показаться, что это синглтон, ведь есть статический метод getInstance() но это не синглтон, ты можешь спокойно создать экземпляр класса.
getInstance() нужен, чтоб не передавать реестр в виде параметра в классы, а можно было бы вызвать Registry::