我有一个单例类,需要实例化一个对象。

我正在使用这种方法来做到这一点:

  public static AppConfig Instance(IConfigManager configManager)
    {
        if (_instanceHolder == null)
        {
            lock (LockObject)
            {
                if (_instanceHolder == null)
                {
                    _instanceHolder = new AppConfig(configManager);
                }
            }
        }

        return _instanceHolder;
    }


在这种情况下,是实现单例的最佳方法吗?

谢谢

最佳答案

在我看来,在这种情况下使用单例似乎是一个非常糟糕的主意。第二个调用将完全忽略configManager参数,因为它将发现已经存在一个实例。这违反了国际海事组织的最小惊奇原则。

由于各种原因,单例模式通常很讨厌,其中最重要的是可测试性。这个例子甚至更糟-一定要远离它。

另外,无论如何在实现单例模式时都不会使用双重检查锁定。有关我的首选选择,请参见my article on the singleton pattern

07-24 22:12