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
  • 相关阅读:
    宿舍助手app——个人工作第四天
    宿舍助手app——个人工作第三天
    对QQ输入法的评价
    冲刺9
    冲刺8
    冲刺7
    冲刺6
    冲刺5
    冲刺4
    冲刺3
  • 原文地址:https://www.cnblogs.com/zhang-can/p/7717477.html
Copyright © 2011-2022 走看看