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
  • 相关阅读:
    LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Coun
    .Net 使用的快捷键
    P2073 送花
    洛谷P1514 引水入城
    花园
    八数码难题
    并查集题目整理
    树链剖分(强势借鉴)
    模拟题
    考试整理
  • 原文地址:https://www.cnblogs.com/zhang-can/p/7717477.html
Copyright © 2011-2022 走看看