美文网首页
python的单例模式

python的单例模式

作者: 萝卜枣 | 来源:发表于2021-10-21 11:16 被阅读0次

    单例模式定义:具有该模式的类只能生成一个实例对象。
    优点:具有很高的解耦性和灵活性

    创建实现单例模式的装饰器

    # 创建外层函数singleton,可以传入类
    def singleton(cls, *args, **kwargs):
        # 创建一个instances字典用来保存单例
        instances = {}
    
        # 创建一个内层函数来获得单例
        def get_instance(*args, **kwargs):
            # 判断instances字典中是否含有单例,如果没有就创建单例并保存到instances字典中,然后返回该单例
            if cls not in instances:
                instances[cls] = cls(*args, **kwargs)
            return instances[cls]
    
        # 返回内层函数get_instance
        return get_instance()
    

    创建一个带有装饰器的类

    @singleton
    class User:
        def __init__(self, name):
            self.name = name
    

    创建user实例

    user = User(name="zhangsan")
    

    @singleton相当于User = singleton(User),在创建实例对象时会先将 User 作为参数传入到 singleton 函数中,函数在执行过程中不会执行 get_instance 函数(函数只有调用才会执行),直接返回get_instance函数名。

    此时可以看作User = get_instance,user = get_instance(name="zhangsan"),调用get_instance 函数,先判断实例是否在字典中,如果在直接从字典中获取并返回,如果不在执行 instances [cls] = User(name="zhangsan"),然后返回该实例对象并赋值非user变量,即user = instances[cls]。

    相关文章

      网友评论

          本文标题:python的单例模式

          本文链接:https://www.haomeiwen.com/subject/vbcrnltx.html