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

单例模式(singleton)- python实现

通俗示例

想象一下,一个国家只有一个国王。不管你在哪里,提到这个国家的国王,大家都能知道是指同一个人。在程序设计中,单例模式就像是这样的国王,一个类只有一个实例,无论你多少次请求这个类的实例,它总是返回同一个对象。

通俗解释

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。这个模式通常用于管理共享资源,如数据库连接或文件系统的操作,其中重复的实例化可能会导致问题或不必要的性能开销。

单例模式的实现步骤

  1. 私有静态实例:单例类中有一个私有的静态变量,用来持有类的唯一实例。
  2. 私有构造函数:单例类的构造函数是私有的,防止外部直接通过new关键字创建对象实例。
  3. 公有静态方法:提供一个公有的静态方法,用于获取单例类的实例。在这个方法中,会检查实例是否已经创建,如果尚未创建,则会创建实例。

Python代码示例

下面是一个简单的单例模式实现示例:

"""
单例模式:确保一个类只有一个实例,并提供一个访问它的全局访问点。优点:1. 减少内存开销,避免重复创建对象2. 减少资源消耗,避免重复使用资源3. 避免对资源的多重占用,例如写文件、数据库连接等4. 优化程序结构,将多个对象组合成一个对象,可以简化对象之间的关系5. 优化程序性能,避免高并发下重复创建对象
"""class Singleton:# 私有静态实例_instance = None# 私有构造函数def __new__(cls, *args, **kwargs):if not cls._instance:cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)return cls._instancedef __init__(self):self.count = 0# 公有方法def display(self):print(f"我是单例对象:{id(self)}")def get_value(self):return self.countdef count_one(self):self.count += 1# 客户端代码
if __name__ == "__main__":s1 = Singleton()print(s1.get_value())s2 = Singleton()s1.display()  # 输出: 我是单例对象:某个IDs2.display()  # 输出: 我是单例对象:同一个ID# 增加计数s1.count_one()# 对应s2也会增加print(s2.get_value())

在这个例子中,我们重写了__new__方法(这是Python中创建新实例的特殊方法),以确保每次尝试创建Singleton类的新实例时,都会返回同一个实例。

单例模式的变体

  • 懒汉式:实例在第一次使用时创建。
  • 饿汉式:实例在类加载时立即创建。

上面的例子是一个懒汉式的单例模式实现。在多线程环境下,懒汉式可能需要额外的同步措施来保证线程安全。

总结

单例模式适用于当你需要一个类来控制资源的访问,确保整个应用程序中只有一个实例被创建和使用。不过,过度使用单例模式可能会导致代码的不灵活和难以测试。因此,应当在确实需要时才使用这种模式。

在这里插入图片描述


http://www.mrgr.cn/news/6505.html

相关文章:

  • MySQL事务
  • 掌握Core Motion:Swift中运动传感器的魔法
  • 判别分析2|Bayes判别分析|Fisher判别分析|软件求解
  • Apollo9.0 PNC源码学习之Planning模块—— Lattice规划(六):横纵向运动轨迹评估
  • 小编需复盘,写练习
  • Vue3 后台管理系统项目 前端部分
  • 电脑换硬盘怎么全盘克隆?轻松实现数据迁移
  • 在SpringBoot中优雅整合MongoDB——让你的数据存储更灵活
  • 东方银行--用 MinIO 和 Dremio 替代 Hadoop
  • 文件操作
  • c++链表(list)
  • 单例模式创建方式
  • 启动zookeeper成功后,查看状态显示It is propbably not running
  • 前端宝典十三:node网络详解Tcp/IP/Http及网络安全防御
  • 一个集成了ChatGPT的聊天应用,支持私有部署,含即时通讯功能,AI技术
  • 使用Python+os/shutil删除文件、空目录和非空目录
  • 输入一个序列,返回所有可能的出栈序列
  • ansible之playbook
  • 背包问题【算法 07】
  • 钓鱼的常见几种方式