澄清单例模式

问题描述

| 我正在为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()
,并每次都获得对同一实例的引用,是吗?     

解决方法

您可能需要将getInstance()方法定义为静态方法,以便无需实例化类即可访问它们。然后,您将使用以下代码:
$objSingleton = LogHelper::getInstance();
并且,您可能想要定义一个私有构造函数:
private function __construct() { }
    ,虽然单身人士一开始似乎是理想的解决方案,但事实并非如此。了解注册表和可靠注入;当您开始单元测试时,它们将使您的生活更轻松。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...