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

    单例模式(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

  • 相关阅读:
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark RDD(Resilient Distributed Datasets)论文
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    【机器学习实战】第10章 K-Means(K-均值)聚类算法
    [译]flexbox全揭秘
  • 原文地址:https://www.cnblogs.com/banshaohuan/p/9824040.html
Copyright © 2011-2022 走看看