美文网首页python开发
单例模式的使用

单例模式的使用

作者: 梦里才是真 | 来源:发表于2018-10-30 22:10 被阅读0次

    单例模式

    1. 单例是什么

    我们日常使用的电脑都有一个回收站,在整个操作系统中,回收站只能有一个实例,整个系统都使用这个唯一的实例,而且回收站自行提供自己的实例。因此回收站是单例模式的应用。

    确保某一个类只会创建出一个实例,这个类称为单例类,单例模式是一种对象创建型模式。

    2. 创建单例-保证只有1个对象

    # 实例化一个单例
    class Singleton:
        __instance = None  # 保存创建首次创建的对象
    
        def __new__(cls):
            # 如果类属性__instance的值为None,
            # 那么就创建一个对象,并且赋值为这个对象的引用,保证下次调用这个方法时能够知道之前已经创建过对象了,这样就保证了只有1个对象
            if cls.__instance is None:
                print("创建对象")
                cls.__instance = super().__new__(cls)
    
            return cls.__instance
    
    
    s1 = Singleton()
    print(s1)  # <__main__.Singleton object at 0x00000000009C5780>
    s2 = Singleton()
    print(s2)  # <__main__.Singleton object at 0x00000000009C5780>
    

    输出结果:

    创建对象
    <__main__.Singleton object at 0x00000000009C5780>
    <__main__.Singleton object at 0x00000000009C5780>
    

    3. 创建单例时,只执行1次init方法

    class Singleton:
        __instance = None  # 保存创建首次创建的对象
        __has_init = False  # 记录是否已经初始化
    
        def __new__(cls):
    
            if cls.__instance is None:
                print("创建对象")
                cls.__instance = super().__new__(cls)
    
            return cls.__instance
    
        def __init__(self):
            if not self.__has_init:
                print("对象初始化")
                self.type = "猫"
                self.__has_init = True
    
    s1 = Singleton()
    s1.type = "动漫人物"
    print(s1.type)
    s2 = Singleton()
    print(s2.type)
    

    输出结果:

    创建对象
    对象初始化
    动漫人物
    动漫人物
    

    个人博客:
    https://blog.csdn.net/niubiqigai/article/details/82829024

    相关文章

      网友评论

        本文标题:单例模式的使用

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