设计模式之单例模式
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 就获取到了该类的单例。
这篇关于设计模式之单例模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-06小米11i印度快充版ROM合集:极致体验,超越期待
- 2024-10-06【ROM下载】小米11i 5G 印度版系统, 疾速跃迁,定义新速度
- 2024-10-06【ROM下载】小米 11 青春活力版,青春无极限,活力全开
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求