zoukankan      html  css  js  c++  java
  • 单例模式

    设计模式是一种编程思想,与具体编程语言无关,在不同的编程语言中有不同的表现形式。这种编程思想的意义比用某种编程语言实现某种设计模式更重要。不能为了设计模式而设计模式,更不能在一种编程语言中生搬硬套另一种编程语言对某种设计模式的具体代码实现。


     单例模式:由于Java不支持全局变量,所以需要一种解决方案以满足全局变量的需求,单例模式就是一种很好的选择。对于已经支持全局变量的语言(如Python)单例模式并非必须。

    单线程时的代码实现:

    class A:
        def __new__(cls):
            if not hasattr(cls,'_instance'): # 不能用__instance
                # cls._instance=super().__new__(cls)
                cls._instance=object.__new__(cls)
            return cls._instance
    
    a1=A()
    a2=A()
    print(id(a1))
    print(id(a2))

     线程安全的代码实现:

    from threading import Thread,Lock
    from time import sleep
    
    
    class A:
        __lock=Lock()
        def __new__(cls):
            with cls.__lock:
                if not hasattr(cls,'_instance'):
                    sleep(1)
                    cls._instance=object.__new__(cls)
            return cls._instance
    
    def f():
        print(id(A()))
    
    t1=Thread(target=f)
    t2=Thread(target=f)
    t1.start()
    t2.start()

     实际Python开发中的单例模式根据业务场景有各种实现方案,如import 模块、__init__.py等都具有单例模式思想。

    object.__new__(cls)使得Python无真正意义上的单例,此法不会调用__init__()

  • 相关阅读:
    获取yyyymmdd hh:ii:ss形式的日期时间
    详解SQL Server如何链接远程MySQL
    SET QUERY_GOVERNOR_COST_LIMIT
    STR函数将数字数据转换成字符数据
    表的转置
    C#中时间的Ticks属性
    创建CheckBox样式的下拉列表
    HTML DOM whiteSpace 属性
    TRUNCATE TABLE
    NFS服务配置.
  • 原文地址:https://www.cnblogs.com/xiongjiawei/p/13854704.html
Copyright © 2011-2022 走看看