单例模式

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
上一篇下一篇

猜你喜欢

热点阅读