Java23种设计模式--单例模式
1、定义
单例模式(Singleton Pattern)是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。
隐藏其所有的构造方法。
属于创建型模式。
2、适用场景
确保任何情况下都绝对只有一个实例。
3、常见写法
第一种:饿汉式单例:在单例类首次加载时就创建实例
/**
* @Package: com.hzg.study.design.pattern.singleton.hungry
* @Description: 饿汉式单例
* @Author: HuangZhiGao
* @CreateDate: 2022-02-18 16:15
*/
public class HungrySingleton {
private static final HungrySingleton INSTANCE = new HungrySingleton();
/**
* 私有化构造器
*/
private HungrySingleton() {
}
/**
* 全局访问点
*/
public static HungrySingleton getInstance() {
return INSTANCE;
}
}
饿汉式单例静态代码块写法:
/**
* @Package: com.hzg.study.design.pattern.singleton.hungry
* @Description: 饿汉式单例(静态代码块初始化)
* @Author: HuangZhiGao
* @CreateDate: 2022-02-18 16:15
*/
public class HungryStaticSingleton {
private static final HungryStaticSingleton INSTANCE;
/**
* 静态代码块
*/
static {
INSTANCE = new HungryStaticSingleton();
}
/**
* 私有化构造器
*/
private HungryStaticSingleton() {
}
/**
* 全局访问点
*/
public static HungryStaticSingleton getInstance() {
return INSTANCE;
}
}
第二种:懒汉式单例:被外部类调用时才创建实例
/**
* @Package: com.hzg.study.design.pattern.singleton.lazy
* @Description: 懒汉式单例
* @Author: HuangZhiGao
* @CreateDate: 2022-02-18 16:24
*/
public class LazySingleton {
private static LazySingleton INSTANCE = null;
/**
* 私有化构造器
*/
private LazySingleton() {
}
/**
* 全局访问点
*/
public static LazySingleton getInstance() {
if (INSTANCE == null) {
INSTANCE = new LazySingleton();
}
return INSTANCE;
}
}
懒汉式单例静态匿名内部类写法(性能最优):
/**
* @Package: com.hzg.study.design.pattern.singleton.lazy
* @Description: 懒汉式单例(匿名静态内部类)(性能最优)
* @Author: HuangZhiGao
* @CreateDate: 2022-02-18 18:00
*/
public class LazyInnerClazzSingleton implements Serializable {
/**
* 私有化构造器
*/
private LazyInnerClazzSingleton() {
}
/**
* 全局访问点
*/
public static final LazyInnerClazzSingleton getInstance() {
return LazyHolder.INSTANCE;
}
private static class LazyHolder {
private static final LazyInnerClazzSingleton INSTANCE = new LazyInnerClazzSingleton();
}
}
第三种:注册式单例:将每一个实例都缓存到统一的容器中,使用唯一标识获取实例