Разъяснение по шаблону синглтона - PullRequest
0 голосов
/ 16 апреля 2011

Я пишу несколько служебных классов для приложения PHP, и многие из них будут одиночными.Я снова и снова переписывал один и тот же код и решил создать абстрактный базовый класс Singleton и создать его подкласс.Просто хочу убедиться, что я сделал это правильно!

abstract class Singleton
{
    private static $instance = NULL;

    public static final function getInstance()
    {
        if(self::$instance == NULL)
            self::$instance = instantiate();

        return self::$instance;
    }

    protected abstract static function instantiate();
}

class LogHelper extends Singleton
{
    protected static final function instantiate()
    {
        return new LogHelper();
    }
}

Теперь, если я сделал это правильно, я могу позвонить LogHelper $LOGGER = LogHelper::getInstance() из любой точки моей кодовой базы и получить ссылку на тот же экземпляркаждый раз, да?

Ответы [ 2 ]

2 голосов
/ 16 апреля 2011

Вероятно, вам нужно будет определить ваши методы getInstance () как статические, чтобы вы могли получить к ним доступ без необходимости создания экземпляра класса. Затем вы будете использовать это:

$objSingleton = LogHelper::getInstance();

И, возможно, вы захотите определить частный конструктор:

private function __construct() { }
1 голос
/ 16 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...