已解决
单例模式详解【2023年最新】
来自网友在路上 161861提问 提问时间:2023-10-29 00:48:24阅读次数: 61
最佳答案 问答题库618位专家为你答疑解惑
一、单例模式概念
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。它的目的是限制一个类只能创建一个对象,以确保在整个应用程序中只有一个共享的实例。
单例模式通常用于以下情况:
- 当一个类只需要一个实例来协调操作时,例如数据库连接池、线程池等。
- 当希望在整个应用程序中共享某个资源或状态时,例如配置信息、日志记录器等。
- 当创建一个对象的成本很高,但又需要频繁地使用该对象时,可以通过单例模式来避免重复创建对象,提高性能。
单例模式的关键特点包括:
- 私有的构造方法:通过将构造方法私有化,防止外部代码直接实例化该类。
- 静态变量持有实例:通过一个静态变量来持有类的唯一实例。
- 全局访问点:提供一个公共的静态方法来获取该实例,以便其他代码可以访问该实例。
常见的单例模式实现方式包括饿汉式、懒汉式、双重检查锁定等。每种实现方式都有其优缺点,选择适合具体需求的实现方式非常重要
二、单例模式类型
1、懒汉式
这里使用了volatile,防止指令重排序。
另外,使用synchronized修饰代码,加锁变成线程安全。
public class SingleTon {
// 懒汉式private static volatile SingleTon singleTon;private SingleTon(){}public static SingleTon getInstance(){if(singleTon==null){synchronized (SingleTon.class){if(singleTon==null){return new SingleTon();}}}return singleTon;}
}
2、饿汉式
这里的饿汉式没什么好说的。
public class SingleTon1 {
// 饿汉式private static final SingleTon1 singleTon1 = new SingleTon1();private SingleTon1(){}public static SingleTon1 getInstance(){return singleTon1;}
}
3、枚举(饿汉式升级版)
前面两种懒汉式和饿汉式都可以被反射或者序列化破坏,他们俩可以把单例对象破坏掉(即产生多个对象)而使用枚举就可以避免这种情况,而且使用枚举在代码简洁的情况下,还不用做任何操作即可保证创建对象的单一性和线程的安全性。
public enum EnumSingleTon {INSTANCE;EnumSingleTon(){System.out.println("枚举创建对象了");}public void doSomeThing(){System.out.println("这是枚举的单例模式");}public static void main(String[] args) {test();}public static void test(){EnumSingleTon enumSingleTon1 = EnumSingleTon.INSTANCE;EnumSingleTon enumSingleTon2 = EnumSingleTon.INSTANCE;System.out.print("enumSingleTon1和enumSingleTon2的地址是否相同:");System.out.println(enumSingleTon1==enumSingleTon2);}
}
运行结果
学生所做,仅记录学习。
查看全文
99%的人还看了
相似问题
- 详解Python安装requests库的实例代码
- 腾讯云4核8G服务器配置价格表,轻量和CVM标准型S5实例
- 类方法,静态方法和实例方法的区别及应用场景
- C#WPF用户控件及自定义控件实例
- 【机器学习】 逻辑回归算法:原理、精确率、召回率、实例应用(癌症病例预测)
- C语言童年生活二三事(ZZULIOJ1091:童年生活二三事(多实例测试))
- QT基础入门【QSS】QT伪状态类型和实例
- spider 网页爬虫中的 AWS 实例数据获取问题及解决方案
- 适合小白的超详细yolov8环境配置+实例运行教程,从零开始教你如何使用yolov8训练自己的数据集(Windows+conda+pycharm)
- python:list和dict的基本操作实例
猜你感兴趣
版权申明
本文"单例模式详解【2023年最新】":http://eshow365.cn/6-27250-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!