实现单例模式及应用场景
单例模式面试经常被问
应用场景:日志logger插入,计时器、权限校验、网站计数器,windows资源管理器,回收站,线程池,数据库连接池等资源池。
什么情况下需要单例模式:
1.每个实例都会占用资源,而且每个实例初始化都会影响性能;
2.当有同步需求的时候,如日志文件的控制,确保只有一个实例。
上代码:
#使用装饰器实现单例模式
def singleton(cls):
__instance = {}
def __getinstance():
if cls not in __instance:
__instance[cls] = cls()
return __instance[cls]
return __getinstance
@singleton
class Dog:
pass
obj = Dog()
obj1 = Dog()
print(id(obj),id(obj1))
如下是使用__new__来实现单例模式
class singleton(object):
    __isinstance = None
 
    def __new__(cls, *args, **kwargs):
        if cls.__isinstance is None:
            cls.__isinstance = object.__new__(cls)
            return cls.__isinstance
        else:
            return cls.__isinstance
        
 
a = singleton()
b = singleton()
print(id(a))
print(id(b))
 
                    
                     
                    
                 
                    
                

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号