首页 > 其他分享 >单例模式

单例模式

时间:2023-12-06 15:25:59浏览次数:54  
标签:__ obj 模式 instance 单例 return cls

创建单例模式

import threading
import time


class Singleton:
    instance = None
    # 加锁是为了当多线程调用时,防止出现多线程执行太快都去新建了一个对象,这就违背了单例模式的意义
    lock = threading.RLock()

    def __init__(self, name):
        self.name = name

    def __new__(cls, *args, **kwargs):
        """
        提前再做一次判断是因为想要优化一下性能,当我们在1000行代码后
        又想调用直接在这里判断不需要再继续往下申请锁再判断
        """
        if cls.instance:
            return cls.instance

        with cls.lock:
            if cls.instance:
                return cls.instance
            cls.instance = object.__new__(cls)
            return cls.instance


def task():
    obj = Singleton('x')
    print(obj)


for i in range(10):
    t = threading.Thread(target=task)
    t.start()

# 1000行代码。。。

obj = Singleton('x')
print(obj)

标签:__,obj,模式,instance,单例,return,cls
From: https://www.cnblogs.com/piggthird/p/17879602.html

相关文章

  • 深入理解和实现Qt中的单例模式
    在Qt框架中,单例模式的实现是一个常见的需求,它有多种实现方式,每种都有其特点。以下是对这些方法的探讨,包括宏定义方式、模板类方式,以及Qt的内置单例宏,并附有具体的使用示例。宏定义方式的单例模式宏定义方式是一种传统且直接的实现单例模式的方法,但它可能导致代码重复和类型安全......
  • 小谈设计模式(12)—迪米特法则
    (小谈设计模式(12)—迪米特法则)专栏介绍专栏地址http://t.csdnimg.cn/VpriY专栏介绍主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。迪米特法则迪米特法则(LawofDemeter)......
  • 敏捷:应对软件定义汽车时代的开发模式变革
    ​随着软件定义汽车典型应用场景的落地,汽车从交通工具转向智能移动终端的趋势愈发明显。几十年前,一台好车的定义主要取决于高性能的底盘操稳与动力系统;几年前,一台好车的定义主要取决于智能化系统与智能交互能否满足终端用户的用车体验;相信不久后的将来,一台好车的定义将变成:全车传......
  • 设计模式(十六)迭代器
    一、定义提供一种方法顺序访问一个聚合对象中的各个元素,且不用暴露该对象的内部表示。迭代器模式是一种对象行为型模式,又称为游标(Cursor)模式。二、描述在软件系统中,聚合对象拥有两个职责:一是存储数据,二是遍历数据。从依赖性来看,前者是聚合对象的基本职责,而后者既是可变化的,又是......
  • 企业集成模式
    资料作者网站https://www.enterpriseintegrationpatterns.com/patterns/messaging/【金山文档】企业集成模式https://kdocs.cn/l/cfbM5BO6gyYj书第10页SpringIntegrationSpring集成框架概述作为Spring编程模型的延伸,SpringIntegration提供了各种配置选项,包括注......
  • 使用Python代码识别股票价格图表模式
    在股票市场交易的动态环境中,技术和金融的融合催生了分析市场趋势和预测未来价格走势的先进方法。本文将使用Python进行股票模式识别。fromcollectionsimportdefaultdictimportnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfromscipy.signalim......
  • 【转】SpringBoot实现策略模式
    文章来源:微信公众号《Java极客技术》 ,作者:鸭血粉丝Tang  1.普通代码实现在介绍SpringBoot中如何实现策略设计模式之前,我们先简单的回顾一下策略模式的设计思路。以编写一个简单的程序计算器,代码如下!首先,我们定义一个Operation接口,用于逻辑的计算publicint......
  • go设计模式之工厂模式
    Go语言实现设计模式之工厂方法模式原创 汀风 汀风说后端 2023-12-0608:10 发表于北京汀风说后端编程知识普及,让学习与工作变得更简单。18篇原创内容公众号摘要:工厂方法模式是一种创建型设计模式,它将对象的创建延迟到子类中进行,通过定义一个创建对......
  • 使用分布式事务 Seata 的 TCC 模式
    Seata的TCC模式需要通过人工编码来实现数据的回滚恢复,有点麻烦,但是性能最高。TCC是3个方法的首字母缩写,即Try方法、Confirm方法、Cancel方法。Try方法进行资源的检查和冻结,Confirm方法是当所有事务都成功后调用的方法,Cancel方法是当整体事务中某个分支事务失败时调用......
  • 23种设计模式——抽象工厂模式
    今天我们来学习一下第三种设计模式——抽象工厂模式,概念:所谓抽象工厂模式就是提供一个接口,用于创建相关或者依赖对象的家族,而不需要明确指定具体类。它允许客户端使用抽象的接口来创建一组相关的产品,而不需要关心实际产出的具体产品是什么。这样一来,客户就可以从具体的产品中被......