• Dart利用私有构造函数_()创建单例模式


    请添加图片描述

    类的构造函数

    类的构造函数有两种:
    1)默认构造函数
    实例化对象的时候,会自动调用的函数,构造函数的名称和类的名称相同,在一个类中默认构造函数只能由一个。
    2)命名构造函数:
    当通过指定的命名构造函数实例化对象时,会调用改命名构造函数,命名构造函数可以有多个。

    class Persion {                                  //persion为类名
    String name;                                   //属性
    int age;
    Persion(this.name, this.age);                 //默认构造函数,当实例化一个对象时,会自动调用到该函数
    Persion.now() {
    print("这是一个命名构造函数");
    }
    getInfo() {                                   //方法
    print("name : $name  age : $age");
    }
    }
    void main() {
    Persion man = new Persion("ShenZhen", 40);    //调用了默认构造函数
    man.getInfo();
    Persion man2 = new Persion.now();             //实例化对象的时候调用了命名构造函数
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    _()函数

    DatabaseHelper._();: 这是一个私有的构造函数,用于确保这个类不能被外部直接实例化。通过使用下划线_作为构造函数的名称的前缀,该构造函数变成了私有的,只能在类内部使用。这是为了实现单例模式(singleton pattern)。

    static final DatabaseHelper dbhelper = DatabaseHelper.();: 这行代码创建了一个静态的、不可变的DatabaseHelper实例,命名为dbhelper。由于构造函数是私有的,外部无法直接实例化DatabaseHelper,因此这个实例是通过调用DatabaseHelper.()来获取的。这种方式确保在整个应用程序中只有一个数据库助手实例,实现了单例模式。

    单例模式的目的是确保一个类只有一个实例,并提供一个全局访问点。在这个例子中,单例模式可能是为了避免在应用程序中多次创建数据库连接,以提高性能或确保数据一致性。

    DatabaseHelper.()的私有构造函数和static final DatabaseHelper dbhelper = DatabaseHelper.();的方式是为了创建一个全局唯一的DatabaseHelper实例,以便在整个应用程序中共享数据库连接或其他资源。

    dart中构造函数定义

    构造函数的名称通常与类名相同,这是 Dart 中的一种约定。但如果你愿意,你可以为构造函数取一个不同的名字,只要没有指定返回类型,它仍然是构造函数。

    在Dart中,如果你定义一个没有显示构造函数的类,Dart会为你生成一个默认的无参构造函数。然而,当你定义了任何构造函数时(无论是否有参数),Dart将不再提供默认构造函数。

    在你的代码中,DatabaseHelper._(); 是一个私有的构造函数,它没有参数,因此它是一个无参构造函数。当你创建一个类的实例时,Dart会调用这个构造函数。

    在这里:

    DatabaseHelper._(); // 单例模式
    
    • 1

    这个构造函数被调用,但由于它是私有的,不能直接在类外部使用,只能在类内部被调用。在这种情况下,它可能被用于在类内部初始化一些数据或资源。

    而在这一行:

    static final DatabaseHelper dbhelper = DatabaseHelper._();
    
    • 1

    dbhelper 是一个静态的、不可变的类变量,它被初始化为 DatabaseHelper._() 调用的结果。这样就创建了一个全局唯一的 DatabaseHelper 实例,并通过 dbhelper 这个静态变量对其进行引用。这也就是为什么这个模式被称为单例模式,因为整个应用程序中只有一个实例。


    结束语
    Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!
  • 相关阅读:
    算法与数据结构之链表
    基于低代码平台实现的知识文档管理系统
    D. Monocarp and the Set
    MSVCR100.dll丢失修复方法,MSVCR100.dll丢失的解决方法
    0106极限存在准则两个重要的极限-函数与极限
    code2vec 代码的连续分布式矢量表示
    C#sharp数据库连接字符串
    类似火车头的采集器-免费任意数据采集器
    优化测试准备-通过仿真诊断提高效率
    SpringBoot bbs(3~4) 过度创作总结。
  • 原文地址:https://blog.csdn.net/yikezhuixun/article/details/134397280