转载自http://blog.sina.com.cn/s/blog_75247c770100yxpb.html
面试的时候,常常会被问到这样一个问题:请您写出一个单例模式(Singleton Pattern)吧。好吧,写就写,这还不容易。顺手写一个:
- public
final class EagerSingleton - {
-
private static EagerSingleton singObj = new EagerSingleton(); -
-
private EagerSingleton(){ -
} -
-
public static EagerSingleton getSingleInstance(){ -
return singObj; -
} - }
- public
final class LazySingleton - {
-
private static LazySingleton singObj = null; -
-
private LazySingleton(){ -
} -
-
public static LazySingleton getSingleInstance(){ -
if(null == singObj ) singObj = new LazySingleton(); -
return singObj; -
} - }
- public
final class ThreadSafeSingleton - {
-
private static ThreadSafeSingleton singObj = null; -
-
private ThreadSafeSingleton(){ -
} -
-
public static Synchronized ThreadSafeSingleton getSingleInstance(){ -
if(null == singObj ) singObj = new ThreadSafeSingleton(); -
return singObj; -
} - }
- public
final class DoubleCheckedSingleton - {
-
private static DoubleCheckedSingletonsi ngObj = null; -
-
private DoubleCheckedSingleton(){ -
} -
-
public static DoubleCheckedSingleton getSingleInstance(){ -
if(null == singObj ) { -
Synchronized(DoubleCheckedSingleton.class){ -
if(null == singObj) -
singObj = new DoubleCheckedSingleton(); -
} -
} -
return singObj; -
} - }
- public
class Singleton - {
-
private static class SingletonHolder -
{ -
public final static Singleton instance = new Singleton(); -
} -
-
public static Singleton getInstance() -
{ -
return SingletonHolder.instance; -
} - }