用Java编写单例的不同方法
问题内容:
用Java编写单例的经典过程是这样的:
public class SingletonObject
{
private SingletonObject()
{
}
public static SingletonObject getSingletonObject()
{
if (ref == null)
// it's ok, we can call this constructor
ref = new SingletonObject();
return ref;
}
private static SingletonObject ref;
}
并且如果需要在多线程情况下运行,可以添加synced关键字。
但是我更喜欢这样写:
public class SingletonObject
{
private SingletonObject()
{
// no code req'd
}
public static SingletonObject getSingletonObject()
{
return ref;
}
private static SingletonObject ref = new SingletonObject();
}
我认为这更简洁,但是奇怪的是我没有看到以这种方式编写的任何示例代码,如果以这种方式编写代码,会不会有不好的效果?
问题答案:
您的代码与“示例代码”之间的区别在于,加载类时将实例化您的单例,而在“示例”版本中,直到实际需要时才实例化它。