单例模式
单例模式的两种实现:饿汉式、懒汉式
单例模式:用一定的手段使软件系统中的某个类只能存在一个对象实例
基本特征:
1、一个类只能有一个示例对象
2、构造器私有化,不允许外部直接创建对象,保证单例模式的安全性
3、存在一个静态变量保存该实例对象
4、存在向外部提供实例对象的方法(get或者直接public暴露)
饿汉式:
顾名思义,着急拿到实例对象,所以一上来就创建(一上来就先吃),不管是否需要该对象
优点:线程安全
缺点:加载时间过长
public class Singleton{
public static final Singleton INSTANCE = new Singleton();
private Singleton(){
// 私有化构造器
}
public static Singleton getInstance(){
return INSTANCE;
}
}
懒汉式:
不着急拿到对象,等需要的时候才创建对象
优点:延迟对象的创建
缺点:线程不安全
public class Singleton{
// 防止外部调用到空的对象实例
private static Singleton INSTANCE = null;
private Singleton(){
// 私有化构造器
}
public static Singleton getInstance(){
if(INSTANCE == null){
INSTANCES = new Singleton();
}
return INSTANCE;
}
}
线程安全的两种写法:
①加上同步代码块
public class Singleton{
// 防止外部调用到空的对象实例
private static Singleton INSTANCE = null;
private Singleton(){
// 私有化构造器
}
public static Singleton getInstance(){
if(INSTANCE == null){
synchronized(Singleton.class){
if(INSTANCE == null){
INSTANCES = new Singleton();
}
}
}
return INSTANCE;
}
}
②用内部类加载的方式实现
public class Singleton{
private Singleton(){
// 私有化构造器
}
private static class Inner{
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance(){
return Inner.INSTANCE;
}
}

浙公网安备 33010602011771号