Просмотр поста

.
AlkatraZ
╭∩╮ (`-`) ╭∩╮
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::