澄清单例模式

| 我正在为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() { }
    
虽然单身人士一开始似乎是理想的解决方案,但事实并非如此。了解注册表和可靠注入;当您开始单元测试时,它们将使您的生活更轻松。     

要回复问题请先登录注册