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();
}
}
第三种:注册式单例:将每一个实例都缓存到统一的容器中,使用唯一标识获取实例
注册式单例枚举写法:
/**
* @Package: com.hzg.study.design.pattern.singleton.registry
* @Description: 注册式单例-枚举单例
* @Author: HuangZhiGao
* @CreateDate: 2022-02-21 10:24
*/
public enum EnumSingleton {
INSTANCE;
/**
* 如果需要让其他对象成为单例,只需要将data改为目标类对象即可
* <p/>
* 通过getter和setter操作
*/
priva

本文详细介绍了Java中的四种单例模式实现:饿汉式、懒汉式、注册式(枚举实现)以及ThreadLocal线程单例。探讨了如何防止单例模式在多线程、反射和序列化情况下被破坏,包括使用synchronized、双重检查锁定、readResolve方法等解决方案。同时,分析了单例模式的优缺点,强调了单例设计模式在节省内存、控制访问和扩展性方面的考量。
1349

被折叠的 条评论
为什么被折叠?



