Java设计模式中单件模式有什么用
发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,小编给大家分享一下Java设计模式中单件模式有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!定义单件模式确保一个类只有一个实例,并提供一个全局访问点Java单件模式经典单件模式
千家信息网最后更新 2025年02月22日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安全错误
数据库的锁怎样保障安全
用友创建数据库服务器
软件开发都是怎么面试的
新型互联网科技
怀旧服碧空之歌服务器还能玩吗
SAP软件开发工程师招聘
广东服务器机房联系方式
网络安全攻击的事件
吃鸡一直提示无法连接服务器
软件开发具体工作内容
上传文件到服务器路径
centos服务器怎么挂载u盘
郑州越云网络技术有限公司
怎么查找社工数据库
疫情期间网络安全使用
组态王实时读取数据库
数据库原理和技术答案
一台服务器管理多台机器
数据库更新表格数据代码
数据库中RUS
杭州集奥网络技术有限公司
数据库2033报错
java-数据库连接池技术
网络软件开发协议书
软件开发怎么拉客户
小米开启查找手机提示服务器出错
5g网络安全架构设计的原则
张店模具软件开发
如何使用国际服务器域名
db数据库指哪方面的信息
金华软件开发招聘