书中实现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
网友评论