python设计模式之单例模式3种实现

python设计模式之单例模式3种实现

单例就是单个实例,我们在定义完一个类的之后,一般使用类名()的方式创建一个对象,而单例设计模式解决的问题就是无论执行多少遍类名(),返回的对象内存地址永远是相同的。

下面我给出python中单例模式的3种实现。

1. 使用__new__方法
class Singleton(object):
    _instance = None
    def __new__(cls, *args, **kw):
        if cls._instance is None:
            cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)
        return cls._instance

class Printer(Singleton):
    pass
2. 使用import
# singleton.py
class Singleton(object):
	def myprint(v):
		print(v)
my_singleton = Singleton()

# test.py
from singleton import my_singleton
my_singleton.myprint()
3. 使用装饰器
def Singleton(cls):
    _instance = {}
    def _singleton(*args, **kargs):
        if cls not in _instance:
            _instance[cls] = cls(*args, **kargs)
        return _instance[cls]
    return _singleton

@Singleton
class Printer(object):
    def __init__(self, v=0):
        self.v = v

你可能感兴趣的:(python)