Python中的设计模式 -- 单例

news2024/10/7 8:25:44

05bd1583c87cbb790d6cb4c544bf1c0c.png

迷途小书童

读完需要

2

分钟

速读仅需 1 分钟

当我们谈到单例模式时,可以想象一个非常特殊的餐厅,这个餐厅只有一个桌子,无论多少人来用餐,都只能坐在这个桌子上。这个桌子就是餐厅的单例,它保证了整个餐厅中只有一个桌子存在。

在 Python 中,单例模式用于确保一个类只有一个实例,并提供一个全局访问点来访问该实例。这在某些情况下非常有用,例如需要共享资源或跨多个对象共享状态的情况。

让我们通过一个例子来理解单例模式的原理。假设我们有一个名为 Database 的类,它表示一个数据库连接。我们希望在整个应用程序中只有一个数据库连接实例。

class Database:
    _instance = None


    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance

在这个例子中,我们使用了 Python 中的特殊方法 __new__ 来控制对象的创建过程。__new__ 方法在对象实例化之前被调用,它负责创建并返回对象的实例。

在 Database 类中,我们使用一个类变量 _instance 来保存唯一的实例。在 __new__ 方法中,我们检查 _instance 是否为 None,如果是,则创建一个新的实例并将其赋值给 _instance,否则直接返回现有的实例。

现在,无论我们在代码中的哪个位置创建 Database 对象,都将返回同一个实例

db1 = Database()
db2 = Database()


# 输出: True
print(db1 is db2)

这是因为 Database 类的 __new__ 方法确保了只有一个实例存在。无论我们创建多少个 Database 对象,它们都指向同一个实例。

通过这个比喻和代码示例,我们可以更好地理解单例模式的原理。它确保了在整个应用程序中只有一个实例存在,就像餐厅中只有一个桌子一样。

需要注意的是,单例模式并不是万能的,它可能会导致全局状态和紧密耦合的代码。因此,在使用单例模式时,需要谨慎考虑其适用性,并确保它符合设计需求。

428e33398fe73d38ff4996374487488b.jpeg

e31a63a8a2af7a319b98506ff7da8c02.gif

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构学习笔记——查找算法中的树形查找(平衡二叉树)

目录 一、平衡二叉树的定义二、平衡因子三、平衡二叉树的插入和构造(一)LL型旋转(二)LR型旋转(三)RR型旋转(四)RL型旋转 四、平衡二叉树的删除(一)叶子结点&a…

进行 XSS 攻击 和 如何防御

跨站脚本攻击(XSS 攻击)是 Web 开发中最危险的攻击之一。以下是它们的工作原理以及防御方法。 XSS 攻击 跨站脚本攻击就是在另一个用户的计算机上运行带有恶意的 JS 代码。假如我们的程序没有对这些恶意的脚本进行防御的话,他们就会由我们的…

【刷题笔记9.25】LeetCode:相交链表

LeetCode:相交链表 一、题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 二、分析及代码 方法一:使用哈希Set集合 (注意…

安装ipfs-swarm-key-gen

安装ipfs-swarm-key-gen Linux安装go解释器安装ipfs-swarm-key-gen Linux安装go解释器 https://blog.csdn.net/omaidb/article/details/133180749 安装ipfs-swarm-key-gen # 编译ipfs-swarm-key-gen二进制文件 go get -u github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm…

机器学习(19)---神经网络详解

神经网络 一、神经网络概述1.1 神经元模型1.2 激活函数 二、感知机2.1 概述2.2 实现逻辑运算2.3 多层感知机 三、神经网络3.1 工作原理3.2 前向传播3.3 Tensorflow实战演示3.3.1 导入数据集查看3.3.2 数据预处理3.3.3 建立模型3.3.4 评估模型 四、反向传播五、例题5.1 题15.2 题…

Qt/C++音视频开发56-udp推流和拉流/组播和单播推流

一、前言 之前已经实现了rtsp/rtmp推流,rtsp/rtmp/hls/flv/ws-flv/webrtc等拉流,这种一般都需要依赖一个独立的流媒体服务程序,有没有一种更便捷的方式不需要这种依赖,然后又能实现推拉流呢,当然有的那就是udpp推流&a…

Linux DataEase数据可视化分析工具结合cpolar实现远程访问

文章目录 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 前言 DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务…

2023-油猴(Tampermonkey)脚本推荐

2023-油猴(Tampermonkey)脚本推荐 知乎增强 链接 https://github.com/XIU2/UserScript https://greasyfork.org/zh-CN/scripts/419081 介绍 移除登录弹窗、屏蔽首页视频、默认收起回答、快捷收起回答/评论(左键两侧)、快捷回…

HTML+CSS综合案例二:CSS简介

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title> CSS简介</title><style>h1{color: #33…

Linux安装Mysql主从集群(图文解说详细版)

MySQL主从集群是一种数据库架构模式&#xff0c;由一个主数据库&#xff08;Master&#xff09;和多个从数据库&#xff08;Slave&#xff09;组成。在主从集群中&#xff0c;主数据库负责处理写操作&#xff08;如插入、更新、删除&#xff09;&#xff0c;而从数据库则用于读…

蓝桥杯每日一题2023.9.23

4961. 整数删除 - AcWing题库 题目描述 分析 注&#xff1a;如果要进行大量的删除操作可以使用链表 动态求最小值使用堆&#xff0c;每次从堆中取出最小值的下标然后在链表中删除 注意long long 代码解释&#xff1a; while(k --){auto t q.top();q.pop();res t.first;i…

【二分图染色】ARC 165 C

C - Social Distance on Graph 题意&#xff1a; 思路&#xff1a; 首先考虑一条链的情况&#xff0c;注意到如果两条相邻的边加起来 < x&#xff0c;一定不行 这个结论推广到图也是一样的 同时注意到 x 具有单调性&#xff0c;考虑对 x 二分 在check时进行二分图染色 …

Linux知识点 -- 网络基础 -- 传输层

Linux知识点 – 网络基础 – 传输层 文章目录 Linux知识点 -- 网络基础 -- 传输层一、传输层协议1.端口号2.网络相关bash命令 二、UDP协议1.UDP报文的解包与交付2.理解UDP报文3.UDP协议的特点4.UDP应用层IO类接口5.UDP的缓冲区6.UDP使用注意事项7.基于UDP的应用层协议 三、TCP协…

SpringMVC 学习(二)Hello SpringMVC

3. Hello SpringMVC (1) 新建 maven 模块 springmvc-02-hellomvc (2) 确认依赖的导入 (3) 配置 web.xml <!--web/WEB-INF/web.xml--> <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee…

简述信息论与采样定理

信息论 香农信息论发表于1948/1949年&#xff0c;它由三部分组成&#xff1a;信号采样、信源编码、信道编码&#xff1b; 信号采样&#xff1a;采样理论研究在何种条件下对连续信号进行采样&#xff0c;从而得到的离散型号可以可逆地恢复出采样前的连续信号。采样得到的离散实…

网络安全--防火墙旁挂部署方式和高可靠性技术

目录 一、防火墙 二、防火墙旁挂部署方式 使用策略路由实现 第一步、IP地址配置 第二步、配置路由 第三步、在防火墙上做策略 第四步、在R2上使用策略路由引流 三、防火墙高可靠性技术--HRP 拓扑图 第一步、配置SW1、SW2、FW1、FW2 第二步、进入防火墙Web页面进行配…

分布式网络在移动医疗场景中的应用

随着医疗信息化建设实践的深入&#xff0c;越来越多的医疗机构开始借助网络信息技术改善其运营及管理模式&#xff0c;为患者提供更高质量、更高效率、更加安全体贴的医疗服务。移动医疗便是在此背景下产生的新业务需求。 常见的移动医疗场景 住院部&#xff1a;移动查房、智…

【好文推荐】openGauss 5.0.0 数据库安全——全密态探究

前言 写此文章的目的&#xff0c;主要是验证&#xff1a; openGauss 5.0.0 数据库能够实现哪种加密方式的全密态全密态数据库的特点 一、全密态介绍 全密态数据库意在解决数据全生命周期的隐私保护问题&#xff0c;使得系统无论在何种业务场景和环境下&#xff0c;数据在传…

Spring面试题23:Spring支持哪些事务管理类型?Spring框架的事务管理有哪些优点?你更倾向用哪种事务管理类型?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring支持哪些事务管理类型? Spring 支持以下几种事务管理类型: 编程式事务管理:通过在代码中显式地使用事务管理 API(如 TransactionTempla…

AMEYA360:瑞萨电子整合Reality AI工具与e² studio IDE,扩大其在AIoT领域的卓越地位

全球半导体解决方案供应商瑞萨电21日宣布已在其Reality AI Tools?和e2 studio集成开发环境间建立接口&#xff0c;使设计人员能够在两个程序间无缝共享数据、项目及AI代码模块。实时数据处理模块已集成至瑞萨MCU软件开发工具套件&#xff08;注&#xff09;&#xff0c;以方便…