静态类和单例模式之间存在什么真实(即实际)差异?
两者都可以在没有实例化的情况下调用,两者都只提供一个"实例",它们都不是线程安全的.还有其他区别吗?
我们有一个类,用于保存应用程序的配置信息.它曾经是一个单身人士.经过一些建筑评论后,我们被告知要删除单身人士.我们确实看到了在单元测试中不使用单例的一些好处,因为我们可以同时测试不同的配置.
如果没有单例,我们必须在代码中的任何地方传递实例.它变得如此混乱,所以我们编写了一个单独的包装器.现在我们将相同的代码移植到PHP和.NET,我想知道是否有更好的模式我们可以用于配置对象.
fallowing子句来自jetbrains.net在阅读了这篇以及网上的其他文章后,我仍然不明白在第一个线程进入锁之后如何返回null.有人确实理解它可以帮助我并以更人性化的方式解释它吗?
"考虑以下代码:
public class Foo
{
private static Foo instance;
private static readonly object padlock = new object();
public static Foo Get()
{
if (instance == null)
{
lock (padlock)
{
if (instance == null)
{
instance = new Foo();
}
}
}
return instance;
}
};
Run Code Online (Sandbox Code Playgroud)
给定上面的代码,初始化Foo实例的写入可以被延迟,直到写入实例值,从而产生实例返回处于单元化状态的对象的可能性.
为了避免这种情况,必须使实例值易变."