Java设计模式中单件模式有什么用
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下Java设计模式中单件模式有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!定义单件模式确保一个类只有一个实例,并提供一个全局访问点Java单件模式经典单件模式
千家信息网最后更新 2026年11月03日Java设计模式中单件模式有什么用
小编给大家分享一下Java设计模式中单件模式有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
定义
单件模式确保一个类只有一个实例,并提供一个全局访问点
Java单件模式
经典单件模式的实现
public class Singleton{ private static Singleton uniqueInstance; // 利用一个静态变量来记录Singleton类的唯一实例 private Singleton(){} // 把构造器声明为私有的,只有自Singleton类内才可以调用构造器 // 用getInstance()方法实例化对象,并返回这个实例 public static Singleton getInstance(){ if (uniqueInstance == null){ uniqueInstance = new Singleton(); } return uniqueInstance; }}在多线程中以上代码会生成多个实例,所以需要我们对代码进行改进
多线程单件模式的实现
public class Singleton{ private static Singleton uniqueInstance; private Singleton(){} public static synchronized Singleton getInstance(){ if(uniqueInstance == null){ uniqueInstance = new Singleton(); } return uniqueInstance; }}通过增加synchronized关键字到getInstance()方法中,我们迫使每个线程在进入这个方法之前,要先等候别的线程离开该方法。也就是说,不会有两个线程可以同时进入这个方法。
急切创建实例
public class Singleton{ // 在静态初始化器(static initializai)中创建单件。这样可以保证线程安全(thread sate) private static Singleton uniqueInstance = new Singleton(); private static Singleton getInstance(){ return uniqueInstance; } }在JVM在加载这个类时马上创建此唯一的单件实例。JVM保证在任何线程访问uniqueInstance静态变量之前,一定创建此实例。
双重检查加锁
会有两次检查实例是否存在,若不存在则创建实例,若存在则返回
public class Singlenton{ // volatile关键词:当uniqueInstance变量被初始化成Singleton实例时,多个线程正确地处理uniqueInstance变量 private volatile static Singleton uniqueInstance(); private Singleton(){} public static Singleton getInstance(){ // 检查实例,如果不存在,就进入同步区块 if(uniqueInstance == null){ // 进入区块后,再检查一次。如果仍是null,才创建实例 synchronized (Singleton.class){ if(uniqueInstance == null){ uniqueInstance = new Singleton(); } } } return uniqueInstance; }}Python单件模式
模块实现
Python 的模块就是天然的单件模式,在模块第一次被导入时,会生成.pyc文件,之后再次导入时,就会直接加载之前生成的.pyc文件,不会再次执行模块代码
先创建一个Singleton文件
class Singleton: def getSingleton: passsingleton = Singleton()
在其他文件中导入这个模块,这个类的地址是唯一的
new关键字实现
当实例化一个对象时,先调用类的__new__方法 ,默认调用的是父类Object.__new__方法,实例化对象。然后再调用类的__init__方法进行属性的初始化。
我们可以再__new__方法内加一个判断,若实例存在,则不实例化,若不存在,则实例化。
class Singleton(object): _instance = None def __new__(cls, *args, **kwargs): if cls._instance is None: cls._instance = object.__new__(cls, *args, **kwargs) return cls._instance def __init__(self): pass
装饰器实现
通过装饰器来实现单件模式
函数装饰器
def singleton(cls): # 创建一个私有变量,类型为字典,用来存放类地址的 _instance = {} def inner(): # 如果类不存在 if cls not in _instance: # 实例化一个类并存放在字典里 _instance[cls] = cls() return _instance[cls] return inner @singletonclass ClassName(object): def __init__(self): pass类装饰器
class Singleton(object): def __init__(self, cls): self._cls = cls # 接受类名 self._instance = {} # 存放类地址 def __call__(self): if self._cls not in self._instance: # 实例化类并存放在字典内 self._instance[self._cls] = self._cls() return self._instance[self._cls]@Singletonclass ClassName(object): def __init__(self): pass看完了这篇文章,相信你对"Java设计模式中单件模式有什么用"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
实例
单件
模式
方法
线程
变量
模块
文件
检查
代码
关键
地址
字典
对象
静态
生成
设计模式
设计
关键字
再次
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网高科技
互联网科技产业
科技互联网产品
狮子座互联网科技
互联网科技股票
齐家互联网科技
广州宏创互联网科技
南京欣网互联网科技
苏州大垚互联网科技
深圳卡尔迅互联网科技有限公司怎么样
互联网科技博主是什么意思
深圳育鹏互联网科技有限公司招聘
互联网科技和法律行业
上海京穆互联网科技有限公司
电子商务与互联网科技的关系
上海同邻互联网科技有限公司规模
唯美互联网科技
易租星互联网科技有限公司
三亚科技创新互联网基地
互联网高科技绘画
互联网金融 科技
互联网医疗科技
互联网 科技创新
宜安科技 互联网金融
致聘互联网科技
成都玖崟互联网科技有限公司乐商圈怎么样
科技互联网大厂
工业互联网科技创业
第三届互联网大会安防黑科技
互联网科技创新方面的资料