1.单例模式,顾名思义就是一个类只生成一个实例。
2.
private static Single Instance;
public static Single getInstance() {
if (Instance == null)
Instance = new Single();
return Instance;
}
这样做有一个问题,当getInstance()放在线程中被调用,并且两个线程同时执行到if(Instance==null)语句时,会产生两个ClassName的实例。于是就有了第二种办法
3.可以考虑在编译时就创建一个对象
private static Single Instance = new Single();
public static Single getInstance() {
return Instance;
}
这么做可以避免多线程的问题,却和延时加载相背离。那么还有没有更好的办法
4.使用静态内部类
private static Single Instance;
private static class InnerClass {
public final static INSTANCE = new Single();
}
public static Single getInstance() {
return InnerClass.INSTANCE;
}
这样的做法在编译时,没有生成一个Single的对象,而是在InnerClass被调用时才生成,也没有多线程时造成的问题。
其它的还有枚举法等,感觉实在是用不上也不需要搞那么麻烦。就不说了