Python设计模式-单例模式

本文深入解析单例模式,探讨其应用场景如线程池、缓存等,阐述模式优势及资源节约,详细介绍两种实现方法:模块级和类级单例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单例模式(Singleton Pattern)

该模式的主要目的是确保某一个类只有一个实例存在,并提供一个全局访问点

单例模式何时用

当你觉得一种对象只需要一个实例存在的时候,如:线程池(thread pool)、缓存(cache)、配置项、注册表、日志等。

单例模式好处

只会存在一个对象,所以便于维护、节约系统资源。

单例模式的实现方式

1. 用模块实现

新建文件singleton.py,然后输入以下代码:

# -*- coding: utf-8 -*-

class MySingleton(object):

    def __init__(self):
        self.name = 'MySingleton'
        print('my_singleton init...')

    def print_info(self):
        print('I am %s' % self.name)

singleton_instance = MySingleton()
del MySingleton # 如果担心会被多次实例化,可以把类一起给删除掉
singleton_instance.print_info() # I am MySingleton

新建文件test.py,然后输入以下代码:

# -*- coding: utf-8 -*-
# 导入 singleton 模块中的 singleton_instance 符号
from singleton import singleton_instance

# 使用 singleton_instance 对象,由于 MySingleton 类在 test.py 中是不可见的,所以无法实例出新的对象
singleton_instance.print_info()

2. 用类实现

新建文件singleton.py,然后输入以下代码:

# -*- coding: utf-8 -*-

class Singleton(object):

    def __init__(self):
        pass

    def __new__(cls, *args, **kwargs):
        if not hasattr(Singleton, "_instance"):
            Singleton._instance = object.__new__(cls)
        return Singleton._instance


for i in range(10):
    obj = Singleton()
    print(obj) # <__main__.Singleton object at 0x0000000001D765F8>
    # 所有对象地址相同,证明单例实例成功

结语

以上是Python中单例模式的相关知识。虽然通过装饰器等其它方法也可以实现单例,但武功强弱不在招式多少,重点在于能学以致用,解决问题。
如有好的建议希望大家留言讨论,共同进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值