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

    单例模式是一种软件设计模式,大概有四种方法来实现。

    #  第一种方式,使用模块,
    #  mysingleton.py
    
    
    class My_Singleton(object):
        def foo(self):
            pass
    
    my_singleton = My_Singleton()
    
    
    #  第二种方式:使用__new__
    class Singleton(object):
        _instance = None
        def __new__(cls,*args,**kwargs):
            if not cls._instance:
                cls._instance = super(Singleton,cls).__new__(cls,*args,**kwargs)
            return cls._instance
    
    class MyClass(Singleton):
        a = 'adsgas'
    
    """
    >>> one = MyClass()
    >>> two = MyClass()
    >>> one == two
    True
    >>> one is two
    True
    >>> id(one), id(two)
    (4303862608, 4303862608)
    """
    
    #  第三种方法:使用装饰器
    from functools import wraps
    
    def singleton(cls):
        instances = {}
        @wraps(cls)
        def getinstance(*args,**kwargs):
            if cls not in instances:
                instances[cls]= cls(*args,**kwargs)
            return instances[cls]
    
    @singleton
    class MyClass(object):
        a = 'dasdas'
    
    
    #  使用metaclass,原类实现单例模式
    
    class Singleton(type):
        _instances = {}
        def __call__(cls,*args,**kwargs):
            if cls not in cls._instances:
                cls._instances[cls] = super(Singleton,cls).__call__(*args,**kwargs)
            return cls._instances[cls]
        
    class MyClass(metaclass=Singleton):
        pass
  • 相关阅读:
    web移动端开发经验总结
    《前端JavaScript面试技巧》笔记一
    《SEO在网页制作中的应用》视频笔记
    web前端开发笔记(2)
    OAuth2.0理解和用法
    基于hdfs文件创建hive表
    kafka 配置事项
    centos7时间同步
    lambda架构
    hbase hadoop版本
  • 原文地址:https://www.cnblogs.com/zhang-can/p/7717477.html
Copyright © 2011-2022 走看看