zoukankan      html  css  js  c++  java
  • 设计模式_单例模式的懒汉式实例化

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

     

    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

    如果觉得文章不错,可以分享给其他人哟~
  • 相关阅读:
    R语言自然语言处理:关键词提取与文本摘要(TextRank)
    webapi文档描述Swagger使用
    EasyUI EasyUI combogrid 组合框使用
    关于winfrom 上传图片到服务方式
    关于NPOIExcel导出excel
    PJzhang:CVE-2019-14287 sudo权限绕过漏洞复现
    青魔法Python(持续更新)
    python如何进行内存管理
    python是如何进行内存管理的
    寒假第二次作业
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12856586.html
Copyright © 2011-2022 走看看