设计模式之单例模式
很重要的一个设计模式!!
介绍:
它和工厂模式一样,都属于创建型模式,用于类进行初始化。
单例模式保证一个类只会被实例化一次。
1. 线程安全的懒汉单例模式
public class SingletonTwo {
private volatile static SingletonTwo singletonTwo;
private SingletonTwo() {
}
public static SingletonTwo getInstance() {
if (singletonTwo == null) {
synchronized (SingletonTwo.class) {
if (singletonTwo == null) {
singletonTwo = new SingletonTwo();
}
}
}
return singletonTwo;
}
}
2. 饿汉式单例模式
public class SingletonThree {
private static SingletonThree singletonOne = new SingletonThree();
private SingletonThree() {
}
public static SingletonThree getInstance() {
return singletonOne;
}
}
3. 内部静态类方式
public class SingletonFour {
private SingletonFour() {
}
public static SingletonFour getInstance() {
return SingletonHolder.singletonFour;
}
private static class SingletonHolder{
private static final SingletonFour singletonFour = new SingletonFour();
}
}
总结:
- 饿汉式非线程安全;
- 懒汉式线程安全(双重检查模式);
- 饿汉式单例模式;
- 内部静态类方式。
单例模式虽然简单,但是想写的严谨,还是需要考虑周全。实际使用中,推荐使用双重检查模式和内部静态类方式。如果实例在你的程序初始化阶段就会被使用,也可以使用饿汉式。非线程安全的懒汉式只能用于非并发的场景,局限性比较大,并不推荐使用。