• 单例模式


    单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。即在整个程序或系统运行过程中一个类只能实例化一个对象。

    比如,通常服务器程序的配置信息会存放在一个文件中,通过一个配置类进行读取,在程序运行过程中很多地方都需要配置信息,此时如果每次读取配置信息的时候都实例化一个类,会造成资源浪费,所以此类配置类基本都只实例化一个对象。

    Python 中有很多实现单例模式的方法,这里主要说明两种方法。

    1 使用 __new__

    可以通过改变 __new__ 方法来控制实例的创建过程。

    class Singleton(object):
        _instance = None
        def __new__(cls, *args, **kw):
            if not cls._instance:
                cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)  
            return cls._instance  
    
    class MyClass(Singleton):  
        a = 1
    

    将类的实例和一个类变量 _instance 关联起来,如果 cls._instance 为 None 则创建实例,否则直接返回 cls._instance 。

    执行结果如下:

    >>> one=MyClass()
    >>> two=MyClass()
    >>> one==two
    True
    >>> one is two
    True
    >>> id(one),id(two)
    (2068174505184, 2068174505184)
    

    2 使用模块

    其实,Python 的模块就是天然的单例模式,因为模块在第一次导入时,会生成 .pyc 文件,当第二次导入时,就会直接加载 .pyc 文件,而不会再次执行模块代码。因此,我们只需把相关的函数和数据定义在一个模块中,就可以获得一个单例对象了。如果我们真的想要一个单例类,可以考虑这样做:

    # mysingleton.py
    class My_Singleton(object):
        def foo(self):
            pass
     
    my_singleton = My_Singleton()
    

    将上面的代码保存在文件 mysingleton.py 中,然后这样使用:

    from mysingleton import my_singleton
     
    my_singleton.foo()
    

    参考链接:https://www.cnblogs.com/yuanchenqi/articles/8323452.html

  • 相关阅读:
    一文搞懂 ThreadLocal 原理
    听说用 Lombok 可以早点下班?
    原来 CPU 为程序性能优化做了这么多
    如何优雅地中止线程?
    线程数,射多少更舒适?
    Elasticsearch 之聚合分析入门
    Go语言之旅:基本类型
    Go语言之旅:包
    网络七层协议之数据链路层
    网络七层协议之物理层
  • 原文地址:https://www.cnblogs.com/banshaohuan/p/9824040.html
Copyright © 2020-2023  润新知