1 什么是单例模式
一个类有且仅有一个实例。
2 缺点
- 相互之间数据修改存在交叉时,不适合使用单例模式
- 通过任意实例修改属性或其他,那么其他实例也会受到影响
- 无论创建多少个实例,最终指向的都是内存中的同一个实例
3 应用场景
- 频繁创建,频繁销毁(比如数据库链接、文档链接)
- 资源管理类一般设置成单例模式(如电脑的回收站)
4 创建单例模式
- 先判断instance中有无保存实例
- 如果保存了,就使用保存的实例
- 如果没有保存,就创建新的实例
- 通过父类的new方法创建新对象
- 将创建的新对象进行赋值,传递给instance
- 返回赋值的__instance
class Soup(object):
__instance = None
def __new__(cls, *args, **kwargs):
'''
因为new方法是用来创建新对象的,现在要确保整个类创建出来的是一个实例
所以要重写__new__方法
:param args:
:param kwargs:
'''
# 先判断instance中有无保存实例
# 如果保存了,就使用保存的实例
# 如果没有保存,就创建新的实例
if cls.__instance is None:
# 通过父类的new方法创建新对象
new_obj = object.__new__(cls)
# 将创建的新对象进行赋值,传递给instance
cls.__instance = new_obj
#返回赋值的__instance
return cls.__instance