Java设计模式中单件模式有什么用
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,小编给大家分享一下Java设计模式中单件模式有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!定义单件模式确保一个类只有一个实例,并提供一个全局访问点Java单件模式经典单件模式
千家信息网最后更新 2025年11月13日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安全错误
数据库的锁怎样保障安全
软件开发软件项目
山西定制oa服务器虚拟主机
后勤管理软件开发
计算机网络技术的挑战
华为服务器引导
数据库审计技术进化
网络安全组织工作流程
窗体修改数据库
北京移动设备管理软件开发
世界网络安全大赛枪神
青庭网络技术有限公司
云端服务器的创始人
软件log数据库
旅游网站数据库
数据下载软件开发
ftp传输文件怎么传到服务器
监控软件开发入门
长高集团网络安全招标
联想惠普服务器回收
sql数据库监视表
码是指数据库中的表中的某个属性
四川中州量子软件开发
数据库怎么看函数依赖关系
网络安全教育课教案大全
两个数据库相互调用
互联网高科技公司
大数据与数据库有什么关系
宣教网络安全法
标准信息与数据库教学视频
网络安全事件统计