三种常见的单例模式

#单例模式
#装饰器版本
def singleton(cls):
    instances = {}
    def getinstance():
        if cls not in instances:
            instances[cls] = cls()
        return instances[cls]
    return getinstance

@singleton
class Myclass:
    pass
ins1 = Myclass()
ins2 = Myclass()
print(id(ins1),id(ins2))#43877264 43877264

#import方法  --> 天然的单例模式
#mysingleton.py  一个py文件
class My_Singleton(object):
    def foo(self):
        pass

my_singleton = My_Singleton()

#to use from mysingleton
# import my_singleton  在另外一个文件中导入类的实例对象
my_singleton.foo()

#使用__new__方法
class Singleton(object):
    def __new__(cls):
        if not hasattr(cls,'_instance'):
            orig = super(Singleton,cls)
            cls._instance = orig.__new__(cls)
        return cls._instance

# class MyClass(singleton):
#     a = 1
ins3 = Singleton()
ins4 = Singleton()
print(id(ins3),id(ins4))#43877656 43877656

  

posted @ 2018-04-22 14:02  zxf123  阅读(88)  评论(0编辑  收藏  举报