首页 > 其他分享 >创建型模式-单例模式(使用元类实现)

创建型模式-单例模式(使用元类实现)

时间:2023-06-27 14:46:11浏览次数:39  
标签:__ 模式 元类 instance 实例 call 单例 ._ cls

# 创建型模式-单例模式(使用元类实现)
# 线程锁:防止创建多个实例
# 双重检查:实例创建后,防止重复加锁占用资源
# __call__作用:__call__方法使一个类的实例像方法一样调用,当我们调用一个实例时,实际就是调用了它的__call__方法
import time
from threading import Lock
from concurrent.futures import ThreadPoolExecutor


class Singletion(type):
_lock = Lock()
_instance = None

def __call__(cls, *args, **kwargs):
if not cls._instance:
with cls._lock:
if not cls._instance:
time.sleep(1)
cls._instance = super(Singletion, cls).__call__(*args, **kwargs)
return cls._instance


class Test(metaclass=Singletion):
pass


def get_instance():
b = Test()
print(id(b))


if __name__ == "__main__":
poll = ThreadPoolExecutor(max_workers=5)
for i in range(10):
poll.submit(get_instance)

标签:__,模式,元类,instance,实例,call,单例,._,cls
From: https://www.cnblogs.com/fuchenjie/p/17508825.html

相关文章

  • 创建型模式-单例模式(使用类实现)
    importtimefromthreadingimportLockfromconcurrent.futuresimportThreadPoolExecutorclassTest():passclassSingleton():_local=Lock()_insrance=None@classmethoddefinstance(cls,*args,**kwargs):ifnotcls._i......
  • 创建型模式-单例模式(使用模块实现)
    singletion模块classTest():passa=Test() 调用模块fromsingleton.testimportaif__name__=="__main__":foriteminrange(10):b=aprint(id(b))......
  • 行为模式
    责任链模式责任链模式是一种行为设计模式,允许你将请求沿着处理者链进行发送。收到请求后,每个处理者均可对请求进行处理,或将其传递给链上的下个处理者。比如kratos,gin等开源库的中间件实现。代码实现packagemainimport( "context" "fmt")typeHandlerfunc(ctxc......
  • 结构型模式
    适配器模式适配器模式用于转换一种接口适配另一种接口。比如,现在有个借口是对json字符串进行分析等,现在有一些yaml文件也要分析,这时候我我们就应该给yaml字符串就个适配器,转换成json字符串,然后就行分析。代码实现packagemainimport( "fmt" "github.com/ghodss/yaml")......
  • 结构型模式概述
    结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。......
  • 桥接模式
    目录1.概述2.结构3.案例4.使用场景1.概述现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系:我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。试想,在一个有多种可能会变化......
  • 组合模式详解
    简介组合模式(Composite)是针对由多个节点对象(部分)组成的树形结构的对象(整体)而发展出的一种结构型设计模式,它能够使客户端在操作整体对象或者其下的每个节点对象时做出统一的响应,保证树形结构对象使用方法的一致性,使客户端不必关注对象的整体或部分,最终达到对象复杂的层次结构与......
  • F5APM第七期Network Access模式配置
    F5APM第七期NetworkAccess模式配置’......
  • F5APM第六期Portal Access模式配置
    F5APM第六期PortalAccess模式配置Portal_conn......
  • 一文掌握设计模式(定义+UML类图+应用)
    一、引子从学编程一开始就被告知,要想做一名优秀的程序员两大必要技能:1.源码阅读(JDK、C等底层语言封装)2.设计模式(使用某种语言优雅的落地典型场景功能)。一般随着工作年限的增长,被迫对底层语言/框架源码阅读的越来愈多,但是设计模式如不刻意去学习,永远不会真正掌握。笔者把设计......