<Python设计模式>-单例模式

1 概述

顾名思义,单例模式(singleton)就是一个类只有一个实例。

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

优点

对唯一实例的受控访问
单例相当于全局变量,防止了命名空间被污染

2 代码实现

方式一


class Singleton:
    def __new__(cls, *args, **kwargs):
        """
        实例化一个对象,开辟一块空间存储这块对象
        """
        if not hasattr(cls,'_instance'): # 如果没有_instance类属性
        		 # 等同于 setattr('_instance',object.__new__(Singleton))
            cls._instance = super(Singleton, cls).__new__(cls) 
        return cls._instance


class CountNum(Singleton):
    def __init__(self,v=0):
        self.v = v

    def incr(self):
        self.v += 1

if __name__ == '__main__':
    c1 = CountNum()
    c2 = CountNum()
    c1.incr()
    c2.incr()
    c1.incr()
    c2.incr()
    print(f'计数值:{c1.v}')
    print(f'c1 的地址是:{id(c1)}')
    print(f'c2 的地址是:{id(c2)}')
"""
OUT:
计数值:4
c1 的地址是:2985030551152
c2 的地址是:2985030551152
"""

方式n:还有不同的方式控制单例,我个人喜欢这种方式

3 使用场景

对于网页日志这种场景必须使用单例模式,因为不同的网页请求必须使用同一套日志。

对于计数场景也不能使用两个实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kobe_OKOK_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值