【Flutter】Dart的工厂构造方法单例对象初始化列表
1. 写在前面
在上篇文章中介绍了Dart
中的构造函数,那么现在就继续来学习 Dart
的工厂构造
&单例对象
&初始化列表
。
【Flutter】苹果Mac电脑配置flutter开发环境
【Flutter】 Android Studio 安装第三方模拟器—网易MuMu
【Flutter】项目运行报错Failed to find Build Tools revision 29.0.2
【Flutter】flutter doctor 报错Android license status unknown. Run `flutter doctor --android-licenses‘
【Flutter】如何新建项目,运行你的第一个 flutter 工程项目
【Flutter】Dart中的var、final 和 const基本使用
【Flutter】Dart数据类型之num
【Flutter】Dart数据类型之String
【Flutter】Dart的数据类型list&Map(数组和字典)
【Flutter】Dart的方法与箭头函数
【Flutter】Dart的方法中的可选参数、方法作为参数传递
【Flutter】Dart中的匿名函数、闭包
【Flutter】Dart中的类和对象
【Flutter】Dart中的构造函数
2. 单例对象
很多时候,我们需要使用单例,那么怎么样创建一个单例呢?我们试试去创建一下。
class FactoryClass{final name;final age;const FactoryClass(this.name,this.age);
}
用
final
修饰所有的属性,这样的方式行不行呢?试试看吧!
FactoryClass fact1 = FactoryClass("reno", 18);FactoryClass fact2 = FactoryClass("jp", 20);print(fact1 == fact2);
打印结果的结果为false
,所有这样是不行的。
- 工厂构造方法
要使用return
返回的话,方法前面必须加factory
,表示工厂构造方法。因为没有返回值,你这里要返回就的用factory
。
class FactoryClass{static FactoryClass? _instance;factory FactoryClass() {// if(_instance == null){// _instance = FactoryClass._init();// }_instance ??= FactoryClass._init();return _instance;}//私有的构造命名函数FactoryClass._init();
}
上面应该是在
dart 2.0
语法之前的写法,会报错,如下:
错误:“
FactoryClass?
”类型的值 无法从返回类型为“FactoryClass
”的函数中返回,因为“FactoryClass?
” 可以为空,而 ‘FactoryClass
’ 不是。
如过你非要这么写单例,在 2.0
之后不报错的话,加个感叹号!
,类似于Swift
中的解包,保证是非空的。
return _instance!;
- 创建两个对象对比一下
从打印结果来看,两个对象是一样的,说明是单例对象。
比较好的写法,如下:
class FactoryClass{//保存单例static final FactoryClass _instance = FactoryClass._init();//私有的构造函数FactoryClass._init();//工厂构造函数factory FactoryClass()=>_instance;
}
- 测试单例
完美运行,结果也是一样的。
3. 初始化列表
定义一个车的类 Car
,属性分别为,车的名称,价格,高度。
class Car {String name;double price;final height;
//构造方法Car(this.name,this.price,double h):height = h,assert(h>=0),assert(price>0){print("name:$name price:$price height:$height");}}
如上代码中,构造方法的冒号:
后面就是初始化列表,可以使用assert
校验属性的值,如果不合规就会报错,如下:
那么按提示的要求改下就好了,也就是达到校验的目的!
初始化列表的目的:
- 给 final 变量赋值
- 校验传递的值
4. 写在后面
关注我,更多内容持续输出
- CSDN
- 掘金
- 简书
【Flutter】Dart的工厂构造方法单例对象初始化列表相关推荐
- 如何在Dart中创建一个单例?
Q: 单例模式确保一个类只有一个实例被创建.我如何在Dart中构建这个模式? A: 在Dart中构建一个单例很容易,以工厂构造方法为例: class Singleton {static final S ...
- IoC与DI工厂、单例、原型模式详解
1.工厂模式 1.1 工厂模式的由来 在现实生活中我们都知道 原始社会自给自足(没有工厂) 农耕社会有了小作坊(简单工厂,如民间酒坊) 工业革命后有了流水线(工厂方法,自产自销) 现代产业链中有代工厂 ...
- 2021年大数据常用语言Scala(二十九):scala面向对象 单例对象
目录 单例对象 定义object - 掌握 伴生对象 - 掌握 apply方法 - 掌握 main方法 单例对象 Scala中没有static关键字,但是它支持静态 如果要定义静态的东西,统统定义到o ...
- Scala单例对象(伴生对象)
概念 Scala语言是完全面向对象的语言,所以并没有静态的操作(即在Scala中没有静态的概 念).但是为了能够和Java语言交互(因为Java中有静态概念),就产生了一种特殊的对象 来模拟类对象,该 ...
- android 克隆对象,克隆会破坏单例对象吗?
假设有这样一个场景,如果复制的目标对象恰好是单例对象,那会不会破坏单例对象呢? 当然,我们在已知的情况下肯定不会这么干,但如果发生了意外怎么办?不防来修改一下代码. public class Conc ...
- Java 设计模式归纳(观察者、工厂、单例、策略、适配器、命令、装饰者、外观、模板方法、状态
DesignPattern 项目地址:youlookwhat/DesignPattern 简介: Java 设计模式归纳 (观察者.工厂.单例.策略.适配器.命令.装饰者.外观.模板方法.状态). ...
- 【scala】类的定义和单例对象
一.类的定义 Scala类的定义跟JAVA中类的定义基本是一样的. 示例 class ChecksumAccumulator{var sum = 0;//Scala默认关键字为publicprivat ...
- ThreadLocal和单例对象比较
单例对象: 自始至终只有一个对象 当线程并发,每个线程需要自己独立的资源变量处理不同的业务时,单例对象远远不能满足需求 因此可以采用ThreadLocal模式 : 每个线程有自己独立的资源变量 ...
- 【Kotlin】Kotlin 单例 ( 懒汉式 与 恶汉式 | Java 单例 | Kotlin 单例 | 对象声明 | 伴生对象 | get 方法 | ? 与 !! 判空 )
文章目录 I . 单例的懒汉式与恶汉式 II . Java 中的懒汉式与恶汉式 III . Kotlin 中对应 Java 的懒汉式与恶汉式 IV . Kotlin 对象 ( object ) 声明 ...
- Scala类的定义,主/辅构造器,以及方法中的变量定义,单例对象,伴生对象,Apply方法调用,应用程序对象
1. 类 1.1. 类的定义 package cn.toto.scala.day2/*** 在Scala中,类并不用声明为public类型的.* Scala源文件中可以包含多个类,所有这些类都具有共有 ...
最新文章
- 宋仲基宋慧乔没能找到对的人,算法能帮我们找到么?
- linuxpip安装python包_Windows+Linux安装Python包管理工具pip
- bat截取字符串[转]
- linux 文件管理器_8个Linux文件管理器尝试
- java透明度_纯度与参考透明度
- Lua基础之coroutine(协程)
- 输入指定答案提示正确C语言,大学C语言课件及复习答案输入输出.ppt
- python怎么存为动图_Python将视频或者动态图gif逐帧保存为图片的方法
- DPDK性能优化技术汇总
- 通过文件名快速查找电脑中的文件
- LCM模组的简介与质量管理(连载四)
- CentOS 官网下载 iso 镜像
- 隐藏桌面上计算机图标不见了怎么办,电脑的快捷图标不见了怎么办
- 下拉刷新?我看好MaterialRefreshLayout!
- FANUC机器人有关动作速度倍率的相关系统变量-解释说明
- 中央财经大学C语言考研真题答案,2017年中央财经大学信息学院901C语言程序设计考研题库...
- Arduino ESP32将数据保存到NVS中
- 不要混淆事件的互不相容和互相独立
- C语言格式化输入和输出; Format格式化
- 【热血传奇】 认识客户端
热门文章