• 单例设计模式


    1.单例设计模式

      举个常⻅的单例模式例⼦,我们⽇常使⽤的电脑上都有⼀个回收站,在整个操作系统中,回收站只能有⼀个实例,整个系统都使⽤这个唯⼀的实例,⽽且回收站⾃⾏提供⾃⼰的实例。因此回收站是单例模式的应⽤。

      确保某⼀个类只有⼀个实例,⽽且⾃⾏实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是⼀种对象创建型模式。

    class Singleton:
        __instance = None  # 类属性
        __is_first = True
    
        def __new__(cls, *args, **kwargs):
            if cls.__instance is None:
                # 申请内存,创建一个对象,并把对象的类型设置为cls
                cls.__instance = object.__new__(cls)
            return cls.__instance
    
        def __init__(self, a, b):
            if self.__is_first:
                self.a = a
                self.b = b
                self.__is_first = False
    
    
    # 调用__new__方法申请内存
    # 如果不重写__new__方法,会调用object的__new__方法
    # object的__new__方法会申请内存,如果重写了__new__方法,需要自己手动申请内存
    s1 = Singleton('呵呵', '嘿嘿嘿')
    s2 = Singleton('哈哈', '嘻嘻嘻')
    print(s1.a, s2.a)  # 呵呵 呵呵
    print(s1.b, s2.b)  # 嘿嘿嘿 嘿嘿嘿
    print(s1 is s2)  # True

    2.总结

    • __new__ ⾄少要有⼀个参数cls,代表要实例化的类,此参数在实例化时由Python解释器⾃动提供。
    • __new__ 必须要有返回值,返回实例化出来的实例,这点在⾃⼰实现 __new__ 时要特别注意,可以return⽗类 __new__ 出来的实例,或者直接是object的 __new__ 出来的实例。
    • __init__ 有⼀个参数self,就是这个 __new__ 返回的实例, __init__ 在 __new__ 的基础上可以完成⼀些其它初始化的动作, __init__ 不需要返回值。
  • 相关阅读:
    unix操作系统一些笔记
    安装SQL SERVER2008 R2出现的几个问题
    js中的类型和函数参数传递类型问题
    js一些要点
    百度2015年前端笔试题(南京区域)
    js 函数中的 this 问题
    html细节
    前后台读取Web.config中的值的方法
    使用的 SQL Server 版本不支持数据类型“datetime2”.
    物料主数据MRP4中的独立/集中
  • 原文地址:https://www.cnblogs.com/zhuzhaoli/p/14161819.html
Copyright © 2020-2023  润新知