单例模式存在的目的是保证当前内存中仅存在单个实例,避免内存浪费!!!
(程序如果并发量大的话,内存里就会存在非常多功能上一模一样的对象。存在这些对象肯定会消耗内存,对于这些功能相同的对象可以在内存中仅创建一个,需要时都去调用)
# 单例模式 class Foo: __n = None def __init__(self): self.name = "nick" self.age = 18 self.job = "pythoner" @staticmethod def dl(): if Foo.__n: return Foo.__n else: Foo.__n = Foo() return Foo.__n # 创建对象时不能再直接使用:obj = Foo(),而应该调用特殊的方法:obj = Foo.dl() 。 f1 = Foo.dl() print(f1) f2 =Foo.dl() print(f2) f3 =Foo.dl() print(f3) # 运行结果 <__main__.Foo object at 0x0000000001142390> <__main__.Foo object at 0x0000000001142390> <__main__.Foo object at 0x0000000001142390>
def singleton(argv): dic = {} def s(*args, **kwargs): if argv not in dic: dic[argv] = argv(*args, **kwargs) return dic[argv] else: return dic[argv] return s # 类上加单例装饰器 @singleton class Foo: pass @singleton class Foo2: pass