040_wz_hm_单例

作者: 王泽0106 | 来源:发表于2020-08-15 20:13 被阅读0次

单例设计模式

设计模式:
设计模式时前人工作的总结和提炼,通常被人们广泛流传的设计模式都是针对某一特定问题的成熟的解决方案,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码的可靠性

单例设计模式:
目的是让类创建的对象在系统中只有唯一的一个实例,每一次执行类名()返回的对象,内存地址是相同的

应用场景:

  • 音乐播放对象
  • 回收站对象
  • 打印机对象
  • .......

__ new __方法

  • 使用类名()创建对象时,python的解释器首先会调用__new__方法为对象分配空间
  • __new__是一个由object基类提供的内置静态方法,主要作用有两个:
    1)在内存中为对象分配空间
    2)返回对象的引用
  • python的解释器获得对象的引用后,将引用作为第一个参数,传递给__init__方法
    注意:重写__new__方法的代码非常固定
  • 重写__new__方法一定要return super().__new__(cls)
  • 否则python的解释器得不到分配了空间的对象引用,就不会调用对象的初始化方法
    注意:__new__是一个静态方法,在调用时需要主动传递cls参数 建立对象 __new__方法

python中的单例

  • 单例——让类创建的对象,在系统中只有唯一的一个实例
  1. 定义一个类属性,初始值时None,用于记录单例对象的引用
  2. 重写__new__方法
  3. 如果类属性is None,调用父类方法分配空间,并在类属性中记录结果
  4. 返回类属性中记录的对象引用 __new__方法流程 单例

只执行一次初始化工作

  • 在每次使用类名()创建对象时,python的解释器都会自动调用两个方法:__new__方法分配空间,__init__方法对象初始化
  • 在上面的案例中对__new__方法重写后,每次都会得到第一次创建对象的引用,但是初始化方法还是会被调用
    需求:让初始化方法只被执行一次

解决流程:

  1. 定义一个类属性init_flag标记是否执行过初始化动作,初始值为False
  2. __init__方法中,判断init_flag,如果是False就执行初始化动作
  3. 然后将init_flag设置为True 只执行一次初始化方法 2020.8.14

相关文章

  • 040_wz_hm_单例

    单例设计模式 设计模式:设计模式时前人工作的总结和提炼,通常被人们广泛流传的设计模式都是针对某一特定问题的成熟的解...

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • IOS单例模式的底层原理

    单例介绍 本文源码下载地址 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一...

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • 2020-11-02-Spring单例 vs. 单例模式

    Spring 单例不是 Java 单例。本文讨论 Spring 的单例与单例模式的区别。 前言 单例是 Sprin...

  • IOS学习笔记之单例

    单例介绍 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一种常用的软件设计模...

  • OC - 单例模式

    导读: 一、什么是单例模式 二、单例的作用 三、常见的单例类 四、自定义单例类的方法 一、什么是单例模式 单例模式...

  • 单例

    单例 单例宏

  • 单例模式

    特点 单例类只有1个实例对象 该单例对象必须由单例类自行创建 单例类对外提供一个访问该单例的全局访问点 结构 单例...

  • 关于java单例模式,这篇已经讲得很清楚了,建议收藏!

    概念 java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。 特点 单例...

网友评论

    本文标题:040_wz_hm_单例

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