当实现单例模式时,可以使用装饰器或元类来实现。以下是一个使用装饰器实现的Python单例模式示例:
def Singleton(cls):
instances = {}
def wrapper(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return wrapper
@Singleton
class ExampleSingleton:
def __init__(self, name):
self.name = name
# 创建示例
obj1 = ExampleSingleton("对象1")
obj2 = ExampleSingleton("对象2")
# 打印对象名
print(obj1.name) # 输出:"对象1"
print(obj2.name) # 输出:"对象1"
print(obj1 is obj2) # 输出:True
在上面的示例中,Singleton
是一个装饰器函数,用于将类包装成单例模式。在创建类ExampleSingleton
的实例时,如果实例不存在,则创建新实例并将其保存在instances
字典中;如果实例已存在,则直接返回已存在的实例。通过这种方式,保证了同一类的实例唯一。
请注意,如果使用该示例的单例类ExampleSingleton
在创建实例时需要传递不同的参数,则无法确保其唯一性。如果确保所有的实例都具有相同的参数,则可以使用该示例。