单例模式
2020-08-05 本文已影响0人
xdm
单例模式是编程中常用的一种设计模式,使用单例模式可以避免大量的对象创建所带来的资源消耗,例如再写一个生成随机图形验证码的时候我们就可以使用单例模式来设计,避免每生成一个图形码就要创建一个对象的消耗。
两种单例
饿汉模式:在实例化之前检查并创建实例, 线程安全。
懒汉模式:在实例化时检查对象是否创建, 线程不安全,如果使用需加锁。
python实现
饿汉模式
class HungrySingleton:
""" 单例模式 饿汉
"""
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super(HungrySingleton, cls).__new__(cls, *args, **kwargs)
return cls._instance
a = HungrySingleton()
b = HungrySingleton()
print(a is b) # True
懒汉模式
class LazySingleton:
""" 单例模式 懒汉
"""
_instance = None
def __init__(self):
if self._instance is None:
print("Instance not created")
else:
print("Instance already created")
@classmethod
def generate_instance(cls):
""" 创建实例
"""
if cls._instance is None:
cls._instance = LazySingleton()
return cls._instance
# 此处需要注意懒汉模式下创建对象的方式
c = LazySingleton.generate_instance()
d = LazySingleton.generate_instance()
print(c is d) # True