zoukankan      html  css  js  c++  java
  • python设计模式 创造者模式-单例模式 温故而知新(一)

    什么是单例模式

    单例模式创建的类有且仅有一个实例,并且自行实例化向整个系统提供,各个线程对总线的访问只有一个全局访问点,即惟一的实例

    为什么单例模式

    场景举例:
    每个服务应用一般都会有个配置文件config.ini,一般是创建一个Config的类来读取配置文件。在编写程序的时候,很多地方都会用到配置文件,这就需要创建很多Config类的实例,这就导致程序中存在多个 Config的实例对象,而这样会严重浪费内存资源。
    事实上,Config 这样的类,我们希望在程序运行期间只存在一个实例对象

    单例模式的优点:

    1. 由于单例模式在全局内只有一个实例,所以可以节省比较多的内存空间
    2. 全局只有一个接入点,可以更好地进行数据同步控制(避免多重占用,变量越级,变量覆盖)
    3. 单例可长驻内存,减少系统开销

    如何编写单例模式

    1.使用__new__方式在实例化前进行判断

    class Danli:
        instance = None
    
        def __new__(cls, *args, **kwargs):
            if Danli.instance is None:
                Danli.instance = super().__new__(cls)
            return Danli.instance
    
        def __init__(self):
            pass
    
    d1 = Danli()
    d2 = Danli()
    
    print(d1)
    print(d2)
    
    
    <__main__.Danli object at 0x10261f518>
    <__main__.Danli object at 0x10261f518>
    
    Process finished with exit code 0
    

    2.把封装的类写在一个py文件中,然后去调用

    demo.py文件

    class Danli:
        def __init__(self):
            pass
    
    d = Danli()
    

    另一个py文件中进行import导入

    from demo import d
    
    d1 = d
    d2 = d
    
    print(d1)
    print(d2)
    
    
    <demo.Danli object at 0x10605b278>
    <demo.Danli object at 0x10605b278>
    
    Process finished with exit code 0
    

    文章来自 Yongchin'blog yongchin.xyz

  • 相关阅读:
    Mac系统下安装和卸载HomeBrew的方法
    .NET笔试题集(五)
    .NET笔试题集(四)
    .NET笔试题集(二)
    .NET笔试题集(三)
    .NET笔试题集(一)
    C# 文件操作方法
    MD5 加密的两种方法
    jquery 元素选择器集合
    Jquery元素追加和删除
  • 原文地址:https://www.cnblogs.com/semishigure/p/14808852.html
Copyright © 2011-2022 走看看