美文网首页
python设计模式_单例模式

python设计模式_单例模式

作者: 金鱼座 | 来源:发表于2019-11-15 15:55 被阅读0次

    上一篇,主要说明了一下MVC这种常见的开发模式,本篇我们来说一下另一种常见的设计思路(单例)

    什么是单例模式?
    在回答这个问题前,我们先做个试验

    class Singleton(object):
        def __init__(self):
            pass 
        pass
    
    a = Singleton()
    b = Singleton()
    
    print("a_id: {}, b_id: {}".format(id(a), id(b)))
    
    执行结果如下 image.png

    看图可以知道, 对于普通的实例化过程,每次的实例化都是一次重新声明,所以最终a和b的id不一样

    面对这种问题, 当我们的需求时,希望a和b不管实例化多少次都是一个id的情况时, 普通的类设计就无法满足我们的要求,所以单例模式的应用场景是所有实例对象封装的数据都相同的场景。在这样的场景下应用单例模式可以减少重复创建对象,从而节约内存
    从网上找了一批,可以通过各种方式来达到单例效果
    1.

    new改写
    new方法为python实例化创建对象自动执行的函数,通过重写这个函数,使之先判断该类中是否有instance属性(利用反射),若没有则为创建一个对象并为该属性赋值,最后返回instance中的对象。通过这种方式我们实现了每次创建实例返回的都是类中的instance的值。
    1. 懒汉方式

      我觉得这种方式最好理解,感觉像是手动完成单例创建逻辑,但注意获得实例一定要调用Singleton.getInstance()方法,直接a=Singleton()相当于没用单例。

    2. 基于元类

      执行Singleton()之后,首先会调用MetaSingleton中的call函数,如果Singleton类没有在instance中,则为其创建一个实例,也就是正常调用type中的call函数,将返回的对象存在instance中,以该类名为键,对象为值,最后返回这个对象,若instance中有该类,那就直接返回存储的对象。
      这种方式我觉得较好,不用为每个类单独创建单例模式,只需将元类重写即可

    转载:https://www.cnblogs.com/sfencs-hcy/p/10022283.html

    相关文章

      网友评论

          本文标题:python设计模式_单例模式

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