Java设计模式中单件模式有什么用

技术Java设计模式中单件模式有什么用小编给大家分享一下Java设计模式中单件模式有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!定义单件模式确保一个类只有一个实例,并提供一个全局访问点Java单

边肖将与大家分享单件模式在Java设计模式中的使用。希望大家看完这篇文章后有所收获。我们一起讨论一下吧!

00-1010 singleton模式确保一个类只有一个实例,并提供全局访问点。

定义

Java单件模式

public class singleton {

privatedstationsingletonniqueinstance;//使用静态变量记录Singleton类的唯一实例。

PrivateSingleton(){}//将构造函数声明为private,构造函数只能从Singleton类内部调用。

//用getInstance()方法实例化对象,并返回此实例。

publicationstaticongetinstance(){ 0

if(UniqueInstance==null){ 0

uniqueInstance=newSingleton();

}

返回唯一实例;

}

}上面的代码会在多线程中生成多个实例,所以我们需要对代码进行改进。

经典单件模式的实现

publicclassSingleton{

privatedstationsingletonniqueinstance;

privateSingleton(){}

publicationstaticsynchronizedsongetinstance(){ 0

if(UniqueInstance==null){ 0

uniqueInstance=newSingleton();

}

返回唯一实例;

}

}通过向getInstance()方法添加synchronized关键字,我们强制每个线程在进入方法之前等待其他线程离开该方法。也就是说,没有两个线程可以同时进入这个方法。

多线程单件模式的实现

publicclassSingleton{

//在staticinitializai中创建单例。这样可以保证线程安全。

privatedstationsingletonniqueinstance=newSingleton();

privatedstaticongetinstance(){ 0

返回唯一实例;

}

}一旦JVM加载了这个类,就创建这个唯一的单例实例。JVM保证这个实例必须在任何线程访问uniqueInstance静态变量之前创建。

00-1010将检查该实例是否存在两次,如果不存在则创建一个实例,如果存在则返回。

public class singletonton {

//volatile关键字:当uniqueInstance变量初始化为Singleton实例时,多个线程可以正确处理uniqueInstance变量。

privatevolatilestaticsingletonniqueinstance();

privateSingleton(){}

publicationstaticongetinstance(){ 0

//检查实例,如果不存在,则进入同步块。

if(UniqueInstance==null){ 0

//进入区块后,再次检查。如果仍然为空,将创建实例。

同步的(Singleton . class){ 0

if(UniqueInstance==null){ 0

uniqueInstance=newSingleton();

}

}

}

返回唯一实例;

}

}

急切创建实例

双重检查加锁

Python的模块是自然的单件模式。第一次导入模块时,会生成一个. pyc文件。当以后再次导入时,以前生成的。pyc文件将被直接加载,模块代码不会再次执行。

/>先创建一个Singleton文件

class Singleton:
	def getSingleton:
		pass
singleton = 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
    
@singleton
class 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]
@Singleton
class ClassName(object):
    def __init__(self):
        pass

看完了这篇文章,相信你对“Java设计模式中单件模式有什么用”有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/89357.html

(0)

相关推荐

  • c语言数据结构算法和排序查找(c语言数据结构排序代码)

    技术如何进行C语言数据结构与算法中的排序总结这篇文章将为大家详细讲解有关如何进行C语言数据结构与算法中的排序总结,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、前言学习

    攻略 2021年12月17日
  • 如何修改linux下mysql环境变量

    技术如何修改linux下mysql环境变量这篇文章主要介绍如何修改linux下mysql环境变量,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!找到linux下面mysql执行路径 eipdb2:~

    攻略 2021年10月29日
  • 抖音刷评价平台,抖音免费刷点赞神器

    技术抖音刷评价平台,抖音免费刷点赞神器抖音刷评价平台,抖音免费刷点赞神器
    抖音免费刷赞手机版
    第四个就是播放完整度。播放完整度说白了就是人们打开你这个视频之后,能否看得完,是打开看了两三秒就换下一个,还是耐着性子从头看

    测评 2021年11月13日
  • Flink 的运行架构详细剖析

    技术Flink 的运行架构详细剖析 Flink 的运行架构详细剖析1. Flink 程序结构
    Flink 程序的基本构建块是流和转换(请注意,Flink 的 DataSet API 中使用的 DataS

    礼包 2021年11月4日
  • 仓鼠公母区分图片,怎样区分仓鼠(三线)公母

    技术仓鼠公母区分图片,怎样区分仓鼠(三线)公母您好仓鼠公母区分图片,最容易的办法是分辨生殖器。母仓鼠的生殖器与肛门比较近,公仓鼠的生殖器与肛门的距离比较远,而且有睾丸。通常小仓鼠很难分辨公母,但出生8周后的仓鼠,母的体型

    生活 2021年11月1日
  • java semaphore 是什么(javasemaphore信号怎么样)

    技术如何解析Java中的Semaphore信号量本篇文章为大家展示了如何解析Java中的Semaphore信号量,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Semaphore

    攻略 2021年12月20日