哲学中有句很经典的话:存在即合理!然而从下面单例模式的两种代码实现方式:饿汉式和懒汉式来看。有必要对它们的存在合理性这个哲学问题做一下探讨。
我们看到懒汉式相对于饿汉式性能低效,而且不安全,代码冗余复杂。几乎可以说没有任何优点,与java语言的目标完全背道而驰。但它居然存在着,这是为什么?难道说是为了衬托出饿汉式单例模式的精妙?或者只是为了考验面试者的记忆力和思维?在我看来,懒汉式真没有存在的必要。
由懒汉式我联想到有时我们的作风是跟懒汉式是一样的,明知某些事早晚要去做的,而且也知道早做要比晚做好很多,但还是非要到了最后时刻才去做。人类啊!诶……
饿汉式:
class SingleTon
{
private static SingleTon st = new SingleTon();
private SingleTon(){ }
public static SingleTon getSingleTon()
{
return st;
}
}
懒汉式:
class SingleTon
{
private static SingleTon st= null;
private SingleTon(){}
public static SingleTon getSingleTon()
{
if (st == null)
{
synchronized (SingleTon.class)
{
if (st == null)
{
st = new SingleTon();
}
}
}
return st;
}
}