• 设计模式_单例模式的懒汉式实例化


    单例模式的懒汉式
    
    在导入模块的时候,可能会无意中创建一个对象,但当时根本用不到
    
    懒汉式实例化能够确保在实际需要时才创建对象
    
    懒汉式实例化是一种节约资源并仅在需要时才创建它们的方式

     

    class Singleton:
        _instance = None
    
        def __init__(self):
            if not Singleton._instance:
                print("__init__的方法使用了,在静态 getinstance 方法才创建了实例对象")
            else:
                # 在静态 getinstance 方法,改变了 _instance 的值
                print("实例已创建",self.getinstance())
    
        @classmethod
        def getinstance(cls):
            '''
            在 getinstance 内写创建实例的语句
                如果在 __init__ 内写明创建语句
                    如果那个对象创建之后没有立即使用,会造成资源浪费
            '''
            if not cls._instance:
                cls._instance = Singleton()
                '''
                创建实例化对象时,还会再调用一次 __init__方法
                    cls._instance = Singleton() 修改了 _instance 属性的状态
                '''
            return cls._instance
    
    
    s = Singleton()
    # __init__的方法使用了,在静态 getinstance 方法才创建了实例对象
    print('已创建对象',Singleton.getinstance())
    '''
    此时才是真正的创建了对象
    运行结果:
    __init__的方法使用了,在静态 getinstance 方法才创建了实例对象
    已创建对象 <__main__.Singleton object at 0x00000206AA2436D0>
    '''
    print(id(s))
    # 2227647559520
    
    s1 = Singleton()
    # 实例已创建 <__main__.Singleton object at 0x00000206AA2436D0>
    print('已创建对象',Singleton.getinstance())
    # 已创建对象 <__main__.Singleton object at 0x00000206AA2436D0>
    print(id(s1))
    # 2227647561248

    创建一个静态变量 _instance = None
    
    在 __init__ 方法内部,不进行创建对象的操作
    
    在类方法 getinstance 方法中,进行类的创建
    注:
    此时会调用一次 __init__ 方法
    
    创建对象时
    s = Singleton()  还会调用一次 __init__ 方法

    2020-05-09

    如果觉得文章不错,可以分享给其他人哟~
  • 相关阅读:
    css系列【div水平垂直居中的几个方法】
    Ajax系列【Ajax原生、jQuery发送Ajax、Axios发送Ajax、Fetch发送Ajax、解决跨域操作步骤】
    vue系列【vue中slot的使用方法】
    rust 在windows系统上构建linux可执行程序
    composer 引入本地指定包
    Go资料
    GO GIN框架(个人架构)
    剔除 和 不为空
    Xmind2021安装激活破解
    TCP segment of a reassembled PDU
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12856586.html
Copyright © 2020-2023  润新知