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

pyhton基础【25】面向对象进阶六

目录

十七.单例模式

实现单例模式的两种方式

__new__方法概述

单例模式的使用场景


十七.单例模式

引入

单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。

实现单例模式的两种方式

使用类属性创建

class Singleton:_instance = Nonedef __new__(cls, *args, **kwargs):if not cls._instance:cls._instance = super().__new__(cls, *args, **kwargs)return cls._instance

使用元类创建:当前方式仅作为了解

class SingletonMeta(type):_instances = {}def __call__(cls, *args, **kwargs):if cls not in cls._instances:cls._instances[cls] = super(SingletonMeta, cls).__call__(*args, **kwargs)return cls._instances[cls]class Singleton(metaclass=SingletonMeta):pass

除了以上两种方式可以实现单例模式外,还有其他方式可以实现。例如:装饰器

__new__方法概述

__new__方法的主要功能是创建一个类的实例,在类的实例化过程中被调用,所以一般将__new__方法称之为初始化方法。

__new__方法要先于__init__方法执行。

单例模式的使用场景

单例模式在软件开发中非常有用,尤其是当需要保证一个类有一个全局唯一的实例时。

以下是一些适合使用单例模式的场景:

  1. 配置管理:当应用程序需要从一个集中的位置读取配置信息时,使用单例可以避免不必要的资源浪费和多次读取。可以创建一个单例配置管理器,无论在代码中的何处需要配置信息,都可以访问这个单一的实例。
  2. 日志记录:日志记录通常在整个项目中只需要一个入口点。使用单例模式,可以保证全局只有一个日志记录器实例,这样可以统一管理日志的格式、目的地和访问方式。
  3. 数据库连接池:数据库连接是昂贵的资源,使用单例模式管理数据库连接池可以降低开销和提高性能。这样,应用程序中的所有组件都使用同一套连接池,而不是为每个请求或组件创建新的连接。
  4. 硬件接口访问:对于访问硬件资源(如打印机、图形卡等)的类,使用单例可以确保全局只有一个接口与之对应。这样就能防止资源冲突并保证硬件命令的顺利执行。
  5. 缓存:单例模式可以用于构建缓存系统。由于缓存通常作为全局资源,因此用单例模式管理可以确保缓存数据的一致性和有效利用资源。
  6. 全局状态或服务:当需要在应用程序的多个部分共享相同的状态或服务时(例如,用户的认证状态、全局任务队列等),单例模式提供了一种确保状态一致性和访问控制的方式
http://www.dtcms.com/a/269339.html

相关文章:

  • 【ARM AMBA AXI 入门 21.1 -- AXI partial 访问和软件的按字节访问关系】
  • Transformer模型架构深度讲解
  • 医疗AI底层能力全链条工程方案:从技术突破到临床落地
  • L0:让大模型成为通用智能体的强化学习新范式
  • 针对Exhcnage Server的攻击防范措施
  • 机器人VLA模型(Vision-Language-Action)
  • 网络安全之XSS漏洞:原理、危害与防御实践
  • 基于mysql8.0.27部署1主2从的MHA集群
  • 从问题出发看Spring的对象创建与管理
  • JDBC 注册驱动的常用方法详解
  • 7.7晚自习作业
  • 两个法宝函数-dir()和help()
  • 网络基本知识和网络传输过程
  • 深度学习7(梯度下降算法改进1)
  • H3初识——入门介绍之serveStatic、cookie
  • AI + 数据治理的趋势:让治理更智能、更敏捷
  • linux操作系统---MySQL Galera Cluster部署
  • 开源 C# .net mvc 开发(八)IIS Express轻量化Web服务器的配置和使用
  • Vidwall: 支持将 4K 视频设置为动态桌面壁纸,兼容 MP4 和 MOV 格式
  • Python 的内置函数 setattr
  • 小架构step系列07:查找日志配置文件
  • Spring Boot登录认证实现学习心得:从皮肤信息系统项目中学到的经验
  • 【力扣(LeetCode)】数据挖掘面试题0002:当面对实时数据流时您如何设计和实现机器学习模型?
  • 独立开发A/B测试实用教程
  • 计算阶梯电费
  • [vroom] docs | 输入与问题定义 | 任务与运输工具 | json
  • 【Mac 从 0 到 1 保姆级配置教程 19】- 英语学习篇-我的英语工作流分享(AI 辅助学习)
  • 基于Arduino Leonardo的机械键盘设计与实现(项目资料)(ID:10)
  • 虚拟机的共享文件夹
  • springAI学习:Advisors