当前位置: 首页 > news >正文

Python学习从0到1 day27 Python 高阶技巧 ③ 设计模式 — 单例模式

此去经年,再难同游

                        —— 24.11.11

一、什么是设计模式

设计模式是一种编程套路,可以极大的方便程序的开发最常见、最经典的设计模式,就是我们所学习的面向对象了。

除了面向对象外,在编程中也有很多既定的套路可以方便开发,我们称之为设计模式:

单例、工厂模式

建造者、责任链、状态、备忘录、解释器、访问者、观察者、中介、模板、代理模式

等等


二、单例模式

引出

创建类的实例后,就可以得到一个完整的、独立的类对象。

用同一个类创建多个类对象,类对象的内存地址是不相同的,即创建出的对象是完全独立的。


为何要使用单例模式

某些场景下,我们需要一个类无论获取多少次类对象,都仅仅提供一个具体的实例用以节省创建类对象的开销和内存开销

比如某些工具类,仅需要1个实例,即可在各处使用

这就是单例模式所要实现的效果


什么是单例模式

单例模式(Singleton Patter)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。

定义:保证一个类只有一个实例,并提供一个访问它的全局访问点

适用场景:当一个类只能有一个实例,而客户可以从一个众所周知的访问点访问它时。


代码

非单例模式

# 演示单例模式的效果class StrTools:passs1 = StrTools()
s2 = StrTools()
print(s1)
print(s2)# id函数展示变量具体的id
print(id(s1))
print(id(s2))

从地址和id值都不同,可以看出,虽然是同一个类创建出的两个对象,但是对内存资源造成了浪费


单例模式

StrTools类

首先定义一个类StrTools,以后创建对象从这个类中直接获取对象,全局只提供唯一一个实例用来创建对象,避免了重复构造大量对象导致的内存的浪费,节省内存开销和创建对象的开销

class StrTools:passstr_tool = StrTools()

test1

from str_tools_py import str_tools1 = str_tool
s2 = str_toolprint(s1)
print(s2)# id函数展示变量具体的id
print(id(s1))
print(id(s2))

test2

from str_tools_py import str_tools1 = str_tool
s2 = str_toolprint(s1)
print(s2)# id函数展示变量具体的id
print(id(s1))
print(id(s2))

可以看出,单例模式创建对象只需要用到同一个类进行创建,节省了内存开支

全局只提供唯一一个实例用来创建对象,避免了重复构造大量对象导致的内存的浪费,节省内存开销

相关文章:

Python学习从0到1 day27 Python 高阶技巧 ③ 设计模式 — 单例模式

此去经年,再难同游 —— 24.11.11 一、什么是设计模式 设计模式是一种编程套路,可以极大的方便程序的开发最常见、最经典的设计模式,就是我们所学习的面向对象了。 除了面向对象外,在编程中也有很多既定的套路可以方便开发,我们称之为设计模…...

Unity 网格模型及优化

一个模型中可以包含很多网格,一个模型可以由多个网格组成。在Unity3D中一个网格可以由多个子网格(Sub-Mesh)组成。 在渲染引擎的时候,每个子网格都要匹配一个材质球来做渲染,实际上一个子网格本身就是一个个普通的模型&#xff0…...

离线 快速搭建 docker docker-compose k8s 环境

所需资源 sealos_5.0.1_linux_arm64.tar.gzkubernetes.tar等docker-compose-linux-aarch64 离线安装sealos,用于安装k8sdocker 首先安装sealos工具 tar zxvf sealos_5.0.1_linux_arm64.tar.gz sealos && chmod x sealos && mv sealos /usr/bin*…...

Excel根据条件动态索引单元格范围

假如我是一个老板,下面有数不胜数的员工,我要检查他们每周的工作产出,列一个排行榜,提高员工积极性,毕竟多劳多得嘛。 每天去手动统计,未免显得不太聪明,我们可以利用公式来解决这个问题。 我们…...

【计算机网络五】HTTP协议!网站运行的奥秘!

目录 HTTP协议 1.HTTP是什么? 2.Fiddler抓包查看HTTP协议格式 3.HTTP请求 4.HTTP响应 HTTP协议 1.HTTP是什么? HTTP ( 全称为 " 超文本传输协议 ") 诞生与 1991 年 . 目前已经发展为最主流使用的一种应用层协议 . HTTP 的前几个版本…...

开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-tool usage入门-Qwen-Agent深入学习(四)

一、前言 Qwen-Agent 是一个利用开源语言模型Qwen的工具使用、规划和记忆功能的框架。其模块化设计允许开发人员创建具有特定功能的定制代理,为各种应用程序提供了坚实的基础。同时,开发者可以利用 Qwen-Agent 的原子组件构建智能代理,以理解和响应用户查询。 本篇将换一种方…...

stream学习

Stream流 定义 Steam流&#xff0c;用于操作集合或者数组中的数据&#xff0c;大量结合了Lamda表达式的语法风格&#xff0c;代码简洁。 重点&#xff1a; 流只能收集一次 ​ 获取Stream流 Stream流要与数据源建立连接。 1.list ​ 直接调用steam()即可 // list List<Stri…...

【数据结构】实验二 单链表的基本操作

一、实验目的 掌握线性表的链式存储结构的表示和实现方法。 掌握链表基本操作的算法实现&#xff0c;以及对相应算法的性能分析。 二、实验内容 1&#xff09;根据输入的一系列整数&#xff0c;以0标志结束&#xff0c;用头插法建立单链表&#xff0c;并输出单链表中各元素…...

SQL 分组查询中的非聚合列要求及实例解析

在 SQL 查询中&#xff0c;当我们对数据进行分组时&#xff0c;通常会用到 GROUP BY 子句。SQL 标准要求&#xff1a;所有非聚合列&#xff08;即没有使用聚合函数的列&#xff09;都必须出现在 GROUP BY 子句中&#xff0c;或者是聚合函数的结果。这篇文章通过一个实例来说明这…...

Unity中实现战斗帧同步的高级技术

一、帧同步的基本原理 帧同步&#xff08;Frame Synchronization&#xff09;在网络游戏中指的是在每一帧上保证所有玩家所看到的游戏状态一致&#xff0c;而不是每个玩家单独计算自己的状态。实现帧同步通常需要每个客户端仅发送用户输入到服务器&#xff0c;并由服务器进行全…...

Qt 正则表达式提取文件中的 USB 设备 ID

Qt 正则表达式提取文件中的 USB 设备 ID flyfish 文档内容 Bus: 001 Device: 001 Description: 1d6b:0002 Linux Foundation 2.0 root hub Bus: 002 Device: 003 Description: 0e0f:0002 , Inc. USB Hub Bus: 002 Device: 002 Description: 0e0f:0003 , Inc. Mouse Bus: 002…...

使用 Python 和 OpenCV 实现摄像头人脸检测并截图

概述 在现代应用中&#xff0c;人脸检测是一项非常重要的技术&#xff0c;广泛应用于安全监控、身份验证等领域。本文将详细介绍如何使用 Python 和 OpenCV 库实现摄像头人脸检测并截图&#xff0c;并通过具体的代码示例来展示整个过程。 环境准备 在开始编写代码之前&#…...

【二叉搜素树】——LeetCode二叉树问题集锦:6个实用题目和解题思路

文章目录 计算布尔二叉树的值求根节点到叶节点的数字之和二叉树剪枝验证二叉搜索树二叉搜索树中第K小的元素二叉树的所有路径 计算布尔二叉树的值 解题思路&#xff1a; 这是一个二叉树的布尔评估问题。树的每个节点包含一个值&#xff0c;其中叶子节点值为 0 或 1&#xff0…...

【计算机视觉】FusionGAN

1. FusionGAN论文阅读 abreheret/FusionGAN: Pytorch implementation of "Generating a Fusion Image: One’s Identity and Another’s Shape" 1.1. WHY 在现实世界中,将对象或人物转换为期望的形状是一种常用技术,但现有的图像翻译方法在处理身份和形状时存在…...

问:SQL优化,七条实践总结?

SQL语句优化是数据库性能调优的重要部分&#xff0c;通过合理的优化可以显著提升查询速度和系统性能。文章总结几种常见SQL语句优化方法。 1. 优化Where子句的顺序 原则&#xff1a;表之间的连接条件应写在其他Where条件之前&#xff0c;能够过滤掉最大数量记录的条件应优先写…...

unity单例模式的不同声明(待完善

总结&#xff1a; 这段代码实现了一个泛型单例模式&#xff08;Singleton Pattern&#xff09;&#xff0c;用于确保某个类&#xff08;由泛型参数 T 指定&#xff09;在整个应用程序中只有一个实例&#xff0c;并且在第一次访问时才创建该实例。该模式保证了该实例的全局唯一…...

大模型在蓝鲸运维体系应用——蓝鲸运维开发智能助手

本文来自腾讯蓝鲸智云社区用户: CanWay 背景 1、运维转型背景 蓝鲸平台从诞生之初&#xff0c;就一直在不遗余力地推动运维转型&#xff0c;让运维团队可以通过一体化PaaS平台&#xff0c;快速编写脚本&#xff0c;编排流程&#xff0c;开发运维工具&#xff0c;从被动地提供…...

vue2,vue3响应式的理解

vue2的话主要使用的是defineProperty对已有属性添加get,set,从而完成对数据的响应式控制&#xff0c;但每次需要for循环对属性进行遍历 function DefineReactive(target, key, value) {//存在多层嵌套的objectObserver(value);Object.defineReactive(target, key, {get() {retu…...

群控系统服务端开发模式-应用开发-前端退出功能

我们从未登录一直到退出&#xff0c;现在已经登录到操作&#xff0c;现在完成退出。退出有两种情况下会退出&#xff1a;第一种情况下是手动点击退出按钮&#xff0c;第二种情况下是登录过期时间到了自动退出的。 一、手动退出 因退出及个人信息页面都在公有页面&#xff0c;所…...

Web入门

Spring 官网&#xff1a;Spring | Home Spring是一个开源的Java企业级应用开发框架。Spring的主要目的是使Java EE&#xff08;Java Platform, Enterprise Edition&#xff09;开发更容易&#xff0c;并且通过提供一系列丰富的库和接口来促进良好编程实践&#xff0c;是…...

ERNIE-4.5-0.3B-PT智能合约分析:区块链安全检测系统

ERNIE-4.5-0.3B-PT智能合约分析&#xff1a;区块链安全检测系统 1. 引言 区块链开发者们经常面临一个头疼的问题&#xff1a;智能合约部署后才发现存在安全漏洞&#xff0c;导致资产损失。传统的安全审计需要专业团队花费数天甚至数周时间&#xff0c;成本高昂且效率低下。现…...

突破限制:NCM音乐格式转换与跨平台播放完全指南

突破限制&#xff1a;NCM音乐格式转换与跨平台播放完全指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 音乐文件解密是许多音乐爱好者面临的实际需求&#xff0c;尤其是当你希望在不同设备上自由播放从网易云音乐下载的NCM格式文…...

GitHub功能全景:从代码创作到企业级方案的技术生态

【导语&#xff1a;GitHub作为全球知名的代码托管平台&#xff0c;提供了丰富多样的功能&#xff0c;涵盖AI代码创作、开发者工作流、应用程序安全等多个领域&#xff0c;还针对不同规模公司、用例和行业提供解决方案&#xff0c;对软件开发行业产生着深远影响。】【GitHub的多…...

基于Phi-4-mini-reasoning的智能运维异常检测系统

基于Phi-4-mini-reasoning的智能运维异常检测系统 1. 运维监控的痛点与智能化需求 运维团队每天都要面对海量的日志数据、监控指标和系统告警。传统监控系统往往只能做到简单的阈值告警&#xff0c;当系统出现异常时&#xff0c;运维人员需要手动翻阅成千上万条日志&#xff…...

Intv_AI_MK11嵌入式开发实战:在WSL2中部署AI模型并集成Keil5

Intv_AI_MK11嵌入式开发实战&#xff1a;在WSL2中部署AI模型并集成Keil5 1. 为什么选择WSL2进行嵌入式AI开发 对于嵌入式开发者来说&#xff0c;传统AI模型开发面临一个典型困境&#xff1a;训练环境通常基于Linux系统&#xff0c;而嵌入式开发工具链&#xff08;如Keil MDK&…...

公交客流统计摄像机系统,能替代监控摄像头吗?

公交车内乘客流量大&#xff0c;安全隐患较多&#xff0c;多年来监控摄像头已经成为车内的标配。随着科技技术的进步&#xff0c;如今公交客流统计摄像机系统&#xff0c;也逐渐部署到了各地公交上。那么公交客流统计摄像机系统&#xff0c;能替代监控摄像头吗&#xff1f;如今…...

PyTorch 2.8镜像法律科技:庭审音视频→AI摘要+关键帧提取+证据链可视化

PyTorch 2.8镜像法律科技&#xff1a;庭审音视频→AI摘要关键帧提取证据链可视化 1. 镜像概述与法律科技应用场景 在司法数字化进程中&#xff0c;庭审音视频处理正面临三大挑战&#xff1a;海量数据难以快速消化、关键信息提取效率低下、证据呈现方式单一。PyTorch 2.8深度学…...

DevOps工具链集成:GitLab CI、Jenkins与Argo CD如何选?

DevOps工具链集成&#xff1a;GitLab CI、Jenkins与Argo CD如何选&#xff1f; 在DevOps实践中&#xff0c;工具链的选型直接影响交付效率与系统稳定性。GitLab CI、Jenkins和Argo CD作为主流工具&#xff0c;分别覆盖持续集成&#xff08;CI&#xff09;、持续交付&#xff0…...

新手福音,用快马AI生成2048论坛登录页,轻松理解Web开发基础

今天想和大家分享一个特别适合新手入门的Web开发小项目——用InsCode(快马)平台快速搭建2048论坛的登录页面。作为刚接触编程的小白&#xff0c;我第一次看到这个需求时有点懵&#xff0c;但通过平台提供的AI生成功能&#xff0c;不仅快速实现了页面&#xff0c;还弄懂了每个环…...

UEFI SCT编译调试踩坑记:我的AARCH64环境搭建与问题解决实录

UEFI SCT编译调试实战&#xff1a;AARCH64环境搭建与疑难问题全解析 当你在深夜的办公室里盯着屏幕上闪烁的光标&#xff0c;第N次尝试编译UEFI SCT测试套件时&#xff0c;那种既熟悉又陌生的挫败感再次袭来。作为UEFI开发者&#xff0c;我们都经历过这样的时刻——官方文档看似…...