实现Singleton模式——剑指offer

2018-11-29  本文已影响0人  二十岁的弹簧

书中实现Singleton模式的时候,不但考虑实现本身,还考虑单线程多线程环境下的效率问题,其中有对多线程编程的理解;
有时间看一下C++
慢慢来
python实现Singleton模式的几种方法

# 装饰器
from functools import wrap

def singleton(cls):
    _instance = {}
    @wrap(cls)
    def decorate(*args, **kwargs):
        if cls not in _instance:
            _instance[cls] = cls(*args, **kwargs)
        return _instance[cls]
    return decorate

@singleton
class MyClass:
    pass

# 继承
class Singleton(object):
    _instance = None
    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = object.__new__(cls, *args, **kwargs)
        return cls._instance
    
class MyClass(Singleton):
    pass

# 元类
class Singleton(type):
    _instance = {}
    def __call__(cls, *args, **kwargs):
        if cls not cls._instance:
            cls._instance[cls] = super(Singleton, cls).__call__(*args, **kwargs)
        return cls._instance[cls]
    
class MyClass(metaclass=Singleton):
    pass        
上一篇 下一篇

猜你喜欢

热点阅读