单例模式如何保证实例的唯一性

前言

无知.jpg

什么是单例模式

  • 指一个类只有一个实例,且该类能自行创建这个实例的一种创建型设计模式。
  • 使用目的:确保在整个系统中只能出现类的一个实例,即一个类只有一个对象。对于频繁使用的对象,“忽略”创建时的开销。
  • 特点:
    • 单例类只有一个实例对象;
    • 该单例对象必须由单例类自行创建;
    • 单例类对外提供一个访问该单例的全局访问点;

如何保证实例的唯一性

那么,如何保证实例的唯一性?

Java 的解决方案之一

对于 Java 来说,要确保类的构造方法是私有的,使用 static final 的私有成员变量存放这个唯一实例。我们还要提供一个获取实例的接口(由于我们要通过类名获取实例,所以接口方法是 static 的)。实现如下:

public class Singleton {
    private static final Singleton instance=new Singleton();
    private Singleton() {}
    public static Singleton getInstance() {
        return instance;
    }
}

我们知道,对于 static 的变量,类所有的实例都可以共享这个变量,我们可以直接通过类名来访问它。再使用 final 修饰这个变量,使得它不能再被改变。

戳此处深入了解 →

Python 的解决方案之一

以下为 Python 使用装饰器实现的单例模式。这里将不可变的类地址存放在了 dict 中,值为那个唯一的实例。

def Singleton(cls):
    _instance = {}

    def getInstance(*args, **kwargs):
        if cls not in _instance:
            _instance[cls] = cls()
        return _instance[cls]
    return getInstance

@Singleton
class test_singleton:
    def __init__(self):
        pass

def main():
    class1 = test_singleton()
    class2 = test_singleton()
    print('class1 id: {}, class2 id: {}'.format( id(class1), id(class2)))
    print(class1 == class2)

main()

# class1 id: 1814844368152, class2 id: 1814844368152
# True

参考

  • Creating a singleton in Python
  • 单例模式(单例设计模式)详解

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/497812.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关系型数据库mysql(8)sql高级语句②

目录 一.子查询——Subquery 语法 环境准备 In——查询已知的值的数据记录 子查询——Insert 子查询——Update 子查询——Delete Not In——表示否定,不在子查询的结果集里 Exists——判断查询结果集是否为空 子查询——别名 ​编辑 二.视图 理论&a…

力扣由浅至深 每日一题.17 杨辉三角

以春为序,敬此荣枯 —— 24.3.28 杨辉三角 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]…

MySQL ② —— 索引原理

1. 索引 1.1 分类 主键索引、唯一索引、普通索引、组合索引、以及全文索引 主键索引 非空唯一索引,一个表只有一个主键索引;在 innodb 中,主键索引的 B 树包含表数据信息。 唯一索引 不可以出现相同的值,可以有 NULL 值。 …

git教程

Git 教程 鲁迅曾经说过:“任何事情都有两面性,既有好的一面也会有坏的一面”,就像git,它既简单又复杂,为什么简单呢?因为常用的命令也就那么几个,多使用几次就能轻松掌握。复杂的是它的原理及更…

HarmonyOS 应用开发之UIAbility组件启动模式

UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景,系统提供了三种启动模式: singleton(单实例模式)multiton(多实例模式)specified(指定实例模式)…

Prometheus +Grafana +node_exporter可视化监控Linux虚机

1、介绍 待补充 2、架构图 待补充 Prometheus :主要是负责存储、抓取、聚合、查询方面。 node_exporter :主要是负责采集物理机、中间件的信息。 3、搭建过程 配置要求:1台主服务器 n台从服务器 (被监控的linux虚机&am…

利用机器学习打造反电信诈骗系统

利用机器学习打造反电信诈骗系统 技术与功能数据集与模型可视化分析与词云结语 随着互联网的普及,电信诈骗日益猖獗,给人们的生活和财产安全带来了巨大的威胁。为了有效应对这一挑战,我们开发了一款基于机器学习的反电信诈骗系统,…

基于单片机音乐喷泉制作设计资料

**单片机设计介绍,基于单片机音乐喷泉制作设计资料 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机音乐喷泉制作设计资料概要主要包括以下几个关键部分:系统概述、硬件设计、软件设计以及实现过…

网络空间测绘系统的商业应用

随着网络空间的不断发展和扩展,网络安全已经成为当今社会面临的重要挑战之一。为了有效应对网络安全威胁,网络空间测绘系统应运而生,成为网络安全领域的重要工具。 网络空间测绘系统不仅能够帮助安全研究人员进行研究和管理,还能为…

IoTeX(IOTX) 推出首个DEPIN数据平台,蓝筹项目合作进入新时代。

首先来了解一下什么是IoTeX(IOTX) 2024年1月25日,作为由IoTeX驱动的首个DEPIN类别优先数据平台,与蓝筹DePIN项目Helium、Akash、Theta、DIMO、Pocket、Drife、WiFi Map和Streamr合作推出。这一官方发布标志着DePIN(去中心化物理基础设施网络&…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之九 简单闪烁效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之九 简单闪烁效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之九 简单闪烁效果 一、简单介绍 二、简单闪烁效果实现原理 三、简单闪烁效果案例实现简单步骤 四、注意事项 一、简单…

戴尔电脑Dell SupportAssist占用内存高,卸载Dell SupportAssist

咨询戴尔客服了解到,SupportAssist是机器出厂自带的一款应用,主要的功能是可以检查驱动更新以及做一些硬件方面的健康检测,有时候后台运行可能会导致进程占用内存比较大,导致访问被的应用崩溃。 咨询卸载不影响之后,然…

前端学习-CSS基础-Day3

一、CSS三大特性 1.1层叠性 相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要解决样式冲突的问题 层叠性原则: 1.样式冲突,遵循的原则是就近原则,哪个样式离结构近&a…

【MagicDrive环境配置】新手配俩星期版

1.创建一个新的环境conda create -n newdrive python3.8 2.激活该环境conda activate newdrive 3.下载MagicDrive源码 git clone --recursive https://github.com/cure-lab/MagicDrive.git,如果出现时间超时八成是网的问题,直接自己下载解压就好 3.我的…

分类任务中的评估指标:Accuracy、Precision、Recall、F1

概念理解 T P TP TP、 T N TN TN、 F P FP FP、 F N FN FN精度/正确率( A c c u r a c y Accuracy Accuracy) 二分类查准率 P r e c i s i o n Precision Precision,查全率 R e c a l l Recall Recall 和 F 1 − s c o r e F1-score F1−s…

AI新工具 又一个开源大模型DBRX击败GPT3.5;根据音频和图像输入生成会说话、唱歌的动态视频

✨ 1: AniPortrait 腾讯开源:根据音频和图像输入生成会说话、唱歌的动态视频 AniPortrait 是个先进的框架,专门用来生成高质量的、由音频和参考肖像图片驱动的动画。如果你有视频,也可以用来实现面部的再现(Face reenactment&am…

京东云搭建幻兽帕鲁Palworld多人游戏联机服务器教程,1分钟开服

使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程,非常简单,京东云推出幻兽帕鲁镜像系统,镜像直接选择幻兽帕鲁镜像即可一键自动部署,不需要手动操作,真正的新手0基础部署幻兽帕鲁,阿腾云atengyun.…

Jmeter调用测试片段 —— 模块控制器

可以使用模块控制器调用测试片段。模块控制器提供了一种在运行时将测试片段替换为当前测试计划的机制。测试片段可以位于任何线程组中。 1、打开一个Jmeter窗口,添加好线程组、用户定义变量、模块控制器、测试片段、察看结果树。 2、用户定义变量同样定义好访问ip及…

【二十七】【算法分析与设计】归并(1),912. 排序数组,归并排序,递归函数的时间复杂度计算,LCR 170. 交易逆序对的总数

912. 排序数组 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5] 提示&#xff1a; 1 < …

学习vue3第十二节(组件的使用与类型)

1、组件的作用用途 目的&#xff1a; 提高代码的复用度&#xff0c;和便于维护&#xff0c;通过封装将复杂的功能代码拆分为更小的模块&#xff0c;方便管理&#xff0c; 当我们需要实现相同的功能时&#xff0c;我们只需要复用已经封装好的组件&#xff0c;而不需要重新编写相…
最新文章