9. 单例模式
什么是单例模式
单例模式(Singleton Pattern)是在整个应用程序内部,在同一时刻只允许有一个实例对象存在的模式。
单例模式其核心思想是确保一个类只有一个实例对象,并提供一个全局访问点来访问该对象。
例如:
现实世界中,地球就是一个单例;你在某一家银行的账户也是一个单例。
这种模式常用于需要严格控制资源或共享状态的场景,例如数据库连接池、线程池、日志记录器等。
Python语言实现单例模式的方法
示例
先看一下不是单例的情况:
# 单例模式 示例
class Singleton:
"""单例的实现方法!"""
def __init__(self, *args):
print("开始对单例对象进行初始化")
obj1 = Singleton()
print(obj1)
obj2 = Singleton()
print(obj2)
print(obj1 is obj2)
运行结果
开始对单例对象进行初始化
<__main__.Singleton object at 0x10ee96e40>
开始对单例对象进行初始化
<__main__.Singleton object at 0x10efd0cd0>
False
两个对象 obj1 和 obj2 的 id 不同,不是单例
使用 重写 __new__
方法,实现单例模式
# 单例模式 示例
class Singleton:
"""单例的实现方法!"""
__instance = None # 用来绑定唯一的对象。
def __new__(cls, *args, **kwargs):
"用来创建一个对象;如果已经创建过了,那么将不再创建此类的对象,直接返回已前创建过的对象。"
if cls.__instance is None:
print('开始创建单例对象!')
cls.__instance = object.__new__(cls, *args, **kwargs) # 没有创建过此对象,则调用父类的__new__创建
return cls.__instance
def __init__(self, *args):
print("开始对单例对象进行初始化")
obj1 = Singleton()
print(obj1)
obj2 = Singleton()
print(obj2)
print(obj1 is obj2)
运行结果
开始创建单例对象!
开始对单例对象进行初始化
<__main__.Singleton object at 0x10d406f90>
开始对单例对象进行初始化
<__main__.Singleton object at 0x10d406f90>
True
两个对象 obj1 和 obj2 的 id 相同,都是同一个对象。是单例模式。