单例模式是设计模式中最简单的,但是,他却有很多的东西需要注意,性能、线程安全等。
原文地址:http://cantellow.iteye.com/blog/838473
- 第一种方式(线程不安全)
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton GetInstance() {
if(instance == null) {
instance = new Singleton;
}
return instance;
}
}
- 第二种方式(线程安全)
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton GetInstance() {
if(instance == null) {
instance = new Singleton;
}
return instance;
}
}
- 第三种方式(无法实现Lazy Loading)
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton GetInstance() {
return instance;
}
}
- 第四种方式(无法实现Lazy Loading)
public class Singleton {
private static Singleton instance = null;
static {
instance = new Singleton();
}
private Singleton() {}
public static Singleton GetInstance() {
return instance;
}
}
- 第五种方式(静态内部类)
public class Singleton {
public static class SingletonHolder {
private static final INSTANCE = new Singleton();
}
private Singleton() {}
public static Singleton GetInstance() {
return SingletonHolder.INSTANCE;
}
}
- 第六种方式
public class Singleton {
}
public enum SingletonEnum {
INSTANCE;
private Singleton instance;
SingletonEnum() {
instance = new Singleton();
}
public static Singleton GetInstance() {
return instance;
}
}
- 第七种方式(序列化不能避免)
public class Singleton {
private volatile static Singleton singleton;
private Singleton (){}
public static Singleton GetSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}