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__()

  • 相关阅读:
    [Leetcode]480. Sliding Window Median
    C++的一些小的知识点
    extern关键字
    c++的默认构造函数 VS 深拷贝(值拷贝) 与 浅拷贝(位拷贝)
    inline-内联函数的优点以及与宏定义的区别
    char类型输出地址
    c++ 对象的内存布局
    Shell 去掉文本中的空格
    牛客网-网易编程题 双端队列找规律
    计算机网络概观
  • 原文地址:https://www.cnblogs.com/xiongjiawei/p/13854704.html
Copyright © 2011-2022 走看看