基本介绍
单例模式的3个必要结构:
- 私有属性。用于保存实例化的单例对象。
- 私有构造器。确保类不会被其他程序实例化。
- 公共静态方法。提供给使用者,获取单例对象。
单例模式的几种实现方式:
-
懒汉式:
在类加载时即进行实例化。
不存在线程安全问题。 -
饿汉式:
在程序首次调用获取实例方法getInstance时,进行实例化。
存在线程安全问题,本文记录了双重锁模式、静态内部类设计来实现饿汉式的线程安全问题。
懒汉模式
public class Sington1 {
private static Sington1 instance;
private Sington1(){
}
public static Sington1 getInstance(){
if (instance == null) {
instance = new Sington1();
}
return instance;
}
}
饿汉模式
public class Sington2 {
private static Sington2 instance = new Sington2();
private Sington2(){}
public static Sington2 getInstance(){
return instance;
}
}
双重锁模式
public class Sington3 {
private static Sington3 instance;
private Sington3(){}
public static Sington3 getInstance(){
if (instance == null) {
synchronized (Sington3.class) {
if (instance == null) {
instance = new Sington3();
}
}
}
return instance;
}
}
静态内部类
public class Sington4 {
private Sington4(){}
private static class Inner{
private static final Sington4 instance = new Sington4();
}
public static Sington4 getInstance(){
return Inner.instance;
}
}