设计模式之单例模式
2021/8/31 23:08:35
本文主要是介绍设计模式之单例模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
单例模式
我们在单例类中添加一个该类的成员属性Instance,并提供一个getInstance方法访问它。一般来说,有如下几种实现。
-
饿汉式
这里的单例,是由JVM加载类时初始化生成的单例,由JVM保证了线程安全。但是耗资源,起步慢。
public class HungrySingleton { private static HungrySingleton instance = new HungrySingleton(); public static HungrySingleton getInstance(){ return instance; } private HungrySingleton(){} }
-
懒汉式
不是在类加载时生成,所以需要我们自己通过同步保证线程安全。通常用双重校验锁实现,是写法最复杂的方式。
public class DoubleLockSingleton { private static volatile DoubleLockSingleton instance; public static DoubleLockSingleton getInstance() { if(instance == null){ synchronized (DoubleLockSingleton.class) { if(instance == null) { instance = new DoubleLockSingleton(); } } } return instance; } private DoubleLockSingleton() { } }
-
静态内部类实现
也是懒汉式的,写法很简洁,个人觉得是最推荐的写法。同时它也是线程安全的,因为单例是在嵌套类被加载时生成的。
public class StaticInnerSingleton { private static class Holder{ private static StaticInnerSingleton instance = new StaticInnerSingleton(); } public static StaticInnerSingleton getInstance(){ return Holder.instance; // 执行到这时才会加载Holder嵌套类。 } private StaticInnerSingleton(){ } }
-
枚举类
枚举自身的特性,JVM会保证线程安全和单一实例。它也是饿汉式的,枚举类加载时就会创建单例。枚举最大的优点在于可以预防反射导致的多例,因为反射无法作用于枚举类。
public enum EnumSingleton { INSTANCE; // 枚举类的构造函数默认是private的 EnumSingleton(){} public void doSomething() { // 这个类的其他方法 } } // 使用时直接 EnumSingleton.INSTANCE 就获取到了该类的单例。
这篇关于设计模式之单例模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-12百万架构师第十五课:源码分析:Spring 源码分析:SpringMVC核心原理及源码分析|JavaGuide
- 2025-01-11有哪些好用的家政团队管理工具?
- 2025-01-11营销人必看的GTM五个指标
- 2025-01-11办公软件在直播电商前期筹划中的应用与推荐
- 2025-01-11提升组织效率:上级管理者如何优化跨部门任务分配
- 2025-01-11酒店精细化运营背后的协同工具支持
- 2025-01-11跨境电商选品全攻略:工具使用、市场数据与选品策略
- 2025-01-11数据驱动酒店管理:在线工具的核心价值解析
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide