单例模式简介
使用场景
- 单例模式算是最简单的设计模式,就像名字中的单例一样,只存在一个实例。一般适用于一下集中情况:
- 系统只需要一个对象存在的时候
- 对象比较大占用资源比较多的时候
- 构建比较复杂,且不需要多个对象的时候
- 比较紧缺的资源对象,比如只有一个打印机
饿汉式
- 饿汉式为单例模式的一种写法,意思是在类加载的时候就初始化对象,不管对象是否有调用,该模式为线程安全的模式,但是会造成一些可能存在的资源浪费(运行过程中未使用到该实例)和启动初始化速度变慢的可能性。该模式写法也比较简单,代码如下:
public class HungrySingleInstance {
private static HungrySingleInstance INSTANCE = new HungrySingleInstance();
private HungrySingleInstance() {
}
public static HungrySingleInstance getInstance() {
return INSTANCE;
}
}
- 由于对象为静态初始化变量,在类加载时初始化,类加载过程由jvm保证线程安全,所以该模式为线程安全模式。饿汉式还有一种写法,就是使用静态代码块初始化静态变量(但是这个写法要注意顺序,如果静态初始化变量写在静态变量定义之前,则会出现静态变量为
null
的情况,我用java8测试过,没有该情况出现,不知道是不是java8做了优化处理),正常的代码:
public class HungrySingleInstance2 {
private static HungrySingleInstance2 INSTANCE;
static {
INSTANCE = new HungrySingleInstance2();
}
private HungrySingleInstance2() {
}
public static HungrySingleInstance2