设计模式 单例
2021/9/2 23:09:41
本文主要是介绍设计模式 单例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
五分钟学设计模式.01.单例模式
基于上方的视频的学习笔记
1.定义
简单来说 就是一个类的构造函数必须是私有的(private)
然后这个类提供一个公开的静态方法 public static 在方法里调用类的构造函数实例化对象
最后这个类存在一个类变量(静态变量 static修饰)
主要作用:确保一个类只有一个实例存在
常见场景:序列号生成器、web页面的计数器、某些消耗许多资源的场景(访问IO或者数据库的资源)
2.细分
饿汉式、懒汉式
2.1 饿汉式
这个唯一的实例,在类进行加载时立刻进行实例化
2.2 懒汉式
这个唯一的实例,在类加载的时候不进行实例化,在第一次使用时再进行实例化
①由于被使用时才实例化,所以还得加上锁,防止并发运行时被重复执行
②由于不是类加载时就执行,所以会在程序运行过程中被反复执行,必须加if判断
2.3 懒汉式 - 双重检查锁
可以发现上面的懒汉式会在程序运行过程中被反复执行,但是我们知道一旦类被实例化,if判断就肯定不为空,而自动锁会导致每个线程运行这个方法时都要排队,导致整体效率低下。
而锁是不能丢的,所以锁要缩小范围,只锁住实例化对象的代码,外部的if判断不锁。
①将自动锁范围缩小到if语句内,只锁住实例化对象的代码
②使用双重检查锁进行初始化的实例必须使用Volatile关键字修饰
Volatile修饰的原因:
3.单例模式的缺点
只有一个实例化对象,会随时被修改,所以为了避免这种风险,单例模式创建的对象一般要求是无状态的——即通常是工具类
这篇关于设计模式 单例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程
- 2024-11-26Springboot单体架构搭建资料详解与实战教程
- 2024-11-26Springboot框架资料:新手入门教程
- 2024-11-26Springboot企业级开发资料入门教程
- 2024-11-26SpringBoot企业级开发资料详解与实战教程
- 2024-11-26Springboot微服务资料:新手入门全攻略