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

文章目录
- 类的构造函数
- _()函数
- 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(); //实例化对象的时候调用了命名构造函数
}
_()函数
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._(); // 单例模式
这个构造函数被调用,但由于它是私有的,不能直接在类外部使用,只能在类内部被调用。在这种情况下,它可能被用于在类内部初始化一些数据或资源。
而在这一行:
static final DatabaseHelper dbhelper = DatabaseHelper._();
dbhelper 是一个静态的、不可变的类变量,它被初始化为 DatabaseHelper._() 调用的结果。这样就创建了一个全局唯一的 DatabaseHelper 实例,并通过 dbhelper 这个静态变量对其进行引用。这也就是为什么这个模式被称为单例模式,因为整个应用程序中只有一个实例。
结束语 Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!
相关文章:
Dart利用私有构造函数_()创建单例模式
文章目录 类的构造函数_()函数dart中构造函数定义 类的构造函数 类的构造函数有两种: 1)默认构造函数: 当实例化对象的时候,会自动调用的函数,构造函数的名称和类的名称相同,在一个类中默认构造函数只能由…...
简述如何使用Androidstudio对文件进行保存和获取文件中的数据
在 Android Studio 中,可以使用以下方法对文件进行保存和获取文件中的数据: 保存文件: 创建一个 File 对象,指定要保存的文件路径和文件名。使用 FileOutputStream 类创建一个文件输出流对象。将需要保存的数据写入文件输出流中…...
面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)
欢迎关注威♥“电击小子程高兴的MATLAB小屋”获取更多资料 该程序复现《面向配电网韧性提升的移动储能预布局与动态调度策略》,具体摘要内容见下图,程序主要分为两大模块,第一部分是灾前预防代码,该部分采用两阶段优化算法&#…...
内网信息收集
目录 本机信息收集 查看系统配置信息 查看系统服务信息 查看系统登录信息 自动信息收集 域内信息收集 判断是否存在域 探测域内存主机&端口 powershell arp扫描 小工具 telnet 查看用户&机器&会话相关信息 查看机器相关信息 查看用户相关信息 免费领…...
windows cmd设置代理
https://blog.csdn.net/SHERLOCKSALVATORE/article/details/123599042...
English:small classified word(continuously update)
Distant family members(远亲) grandparents (外)祖父母 grandpa grandma grandchildren (外)孙女 aunt 姑姑 / 婶婶 / 姨 / 舅妈 uncle 叔叔 / 姑父 / 姨父/ 舅舅 niece 侄女 / 外甥女 nephew 侄子 / 外甥 cousin 堂 / 表兄弟姐妹 Appearance(外貌) …...
JQuery ajax 提交数据提示:Uncaught TypeError:Illegal invocation
JQuery ajax 提交数据提示:Uncaught TypeError:Illegal invocation 1 问题描述 用jQuery Ajax向DRF接口提交数据的时候,console提示:Uncaught TypeError:Illegal invocation(未捕获的异常:非法调用)。 这个问题可能有两种原因导…...
java实现选择排序
算法步骤 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第二步,直到所有元素均排序完毕。 动图演…...
蓝桥杯 大小写转换
islower/isupper函数 islower和issupper是C标准库中的字符分类函数,用于检查一个字符是否为小写字母或大写字母 需要头文件< cctype>,也可用万能头包含 函数的返回值为bool类型 char ch1A; char ch2b; //使用islower函数判断字符是否为小写字母 if(islower(…...
在誉天学习华为认证,有真机吗
通过培训机构学习华为认证,特别是在HCIE的课程学习中,很多人关心的就是培训机构是否有真机能够进行华为认证的相关实验,今天我们一起来看看,在誉天学习华为认证,有真机吗? 誉天总部数据中心机房和誉天总部一…...
SpringBoot-配置文件properties/yml分析+tomcat最大连接数及最大并发数
SpringBoot配置文件 yaml 中的数据是有序的,properties 中的数据是无序的,在一些需要路径匹配的配置中,顺序就显得尤为重要(例如在 Spring Cloud Zuul 中的配置),此时一般采用 yaml。 Properties ①、位…...
07.智慧商城——商品详情页、加入购物车、拦截器封装token
01. 商品详情 - 静态布局 静态结构 和 样式 <template><div class"prodetail"><van-nav-bar fixed title"商品详情页" left-arrow click-left"$router.go(-1)" /><van-swipe :autoplay"3000" change"onCha…...
查看libc版本
查看libc库版本 查看系统libc版本 $ ldd --version ldd (Ubuntu GLIBC 2.27-3ubuntu1.2) 2.27 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or …...
【电路笔记】-快速了解无源器件
快速了解无源器件 文章目录 快速了解无源器件1、概述2、电阻器作为无源器件3、电感器作为无源器件4、电容器作为无源器件5、总结 无源器件是电子电路的主要构建模块,没有它们,这些电路要么根本无法工作,要么变得不稳定。 1、概述 那么什么是…...
拼多多商家私信群发脚本,按键精灵版工具,源码分享
也是用按键精灵写的,实现的功能就是通过图色识别拼多多商品列表然后逐个对商家客服进行私信,私信内容可以在脚本里面提前配置好,代码怎么部署?回答:粘贴到你的按键精灵就行了,因为代码完全开源。 UI界面&a…...
在原生HTML页面发起axios请求
在原生html页面发起axios请求,首先需要先引入axios文件包,然后按照axios的请求方式发起请求即可,但如果页面在本地,那么请求一般会报错跨域问题,需要部署一下才能正确请求数据; 例子 <!DOCTYPE html&g…...
重看工厂模式
重看工厂模式 之前整个设计模式的专栏是看了李建忠老师的视频,并没有太多的自己的总结,今天来回看一下设计模式,重温设计模式的魅力 工厂模式我们介绍三个: 简单工厂 工厂方法 抽象工厂 简单工厂 我们举个例子,…...
基于SpringBoot的SSMP整合案例(业务层基础开发与快速开发)
业务层基础开发 接口类public interface BookService {boolean save(Book book);boolean update(Book book);boolean delete(Integer id);Book getById(Integer id);List<Book> getAll();IPage<Book> getByPage(int currentPage,int pageSize);IPage<Book> …...
[Android]创建TabBar
创建一个包含“首页”、“分类”和“我的”选项卡的TabBar并实现切换功能,通常可以通过使用TabLayout结合ViewPager或ViewPager2来完成。以下是一个基本的示例,展示了如何使用Kotlin和XML来实现这个功能。 1.添加依赖项到build.gradle dependencies {/…...
UE5 UMG InvalidationBox和RetainerBox
作用:提高UMG运行效率 RetainerBox:需要手动刷新UMG渲染,节点RequestRender渲染 InvalidationBox:每间隔多帧渲染一次UMG...
从芯片包到破解:Keil MDK5完整安装与配置实战(附最新支持包离线导入方法)
从芯片包到破解:Keil MDK5完整安装与配置实战(附最新支持包离线导入方法) 在嵌入式开发领域,Keil MDK5作为ARM架构微控制器的主流开发环境,其安装配置的完整性与稳定性直接影响后续开发效率。本文将系统性地拆解从软件…...
ESP8266天气时钟DIY全攻略:从零搭建到个性化定制
1. 硬件准备与成本控制 作为一个玩了多年智能硬件的爱好者,我强烈推荐从ESP8266开始入门物联网项目。这款芯片的价格实在太香了,9块钱就能买到NodeMCU开发板,性能却足够应付大多数DIY场景。我去年做过统计,用ESP8266搭建的天气时钟…...
Spring Boot项目实战:用ShardingSphere-JDBC 5.3.2搞定PostgreSQL分库分表,附完整配置流程
Spring Boot与ShardingSphere-JDBC深度整合:PostgreSQL分库分表实战指南 当你的应用用户量突破百万级,单表数据量超过千万行时,是否经常遇到查询响应变慢、写入性能下降的问题?作为经历过多次系统扩容的老兵,我想分享一…...
PingFangSC字体专业配置与高效应用实践指南
PingFangSC字体专业配置与高效应用实践指南 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件,包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC 在数字设计领域,字体选择直接影响用户体验与信息传…...
CLIP-GmP-ViT-L-14算力适配:自动检测CUDA版本并加载对应优化内核
CLIP-GmP-ViT-L-14算力适配:自动检测CUDA版本并加载对应优化内核 1. 引言:当高性能模型遇见复杂环境 如果你部署过AI模型,大概率遇到过这样的场景:好不容易把模型跑起来了,却发现速度慢得让人抓狂,或者干…...
无损视频剪辑效率全攻略:5分钟掌握革新性剪辑技术
无损视频剪辑效率全攻略:5分钟掌握革新性剪辑技术 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 你是否曾因视频剪辑软件的漫长渲染过程而错失发布良机&a…...
STC89C52内存告急?手把手教你优化MPU6050 DMP库,让51单片机也能流畅跑姿态解算
STC89C52内存告急?手把手教你优化MPU6050 DMP库,让51单片机也能流畅跑姿态解算 当你在STC89C52这类资源有限的51单片机上尝试运行MPU6050的DMP(Digital Motion Processor)库时,是否遇到过编译失败或运行不稳定的情况&…...
Qwen3-14B GPU算力优化实践:显存占用降低28%的FlashAttention-2配置
Qwen3-14B GPU算力优化实践:显存占用降低28%的FlashAttention-2配置 1. 开箱即用的私有部署方案 对于想要快速部署Qwen3-14B大模型的企业和个人开发者来说,这个经过优化的私有部署镜像提供了完美的解决方案。它基于RTX 4090D 24GB显存显卡和CUDA 12.4环…...
Llama-3.2V-11B-cotGPU算力优化:双卡4090自动拆分模型实测报告
Llama-3.2V-11B-cot GPU算力优化:双卡4090自动拆分模型实测报告 1. 项目概述 Llama-3.2V-11B-cot是基于Meta最新多模态大模型开发的高性能视觉推理工具,专为双卡RTX 4090环境深度优化。作为一款11B参数规模的视觉推理工具,它解决了传统大模…...
颠覆级植物大战僵尸修改工具:一站式资源管理与战局掌控解决方案
颠覆级植物大战僵尸修改工具:一站式资源管理与战局掌控解决方案 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 还在为植物大战僵尸中阳光不足而焦虑吗?面对海量僵尸浪潮却束…...
