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校验属性的值,如果不合规就会报错,如下:

那么按提示的要求改下就好了,也就是达到校验的目的!

初始化列表的目的:

  1. 给 final 变量赋值
  2. 校验传递的值

4. 写在后面

关注我,更多内容持续输出

  • CSDN
  • 掘金
  • 简书

【Flutter】Dart的工厂构造方法单例对象初始化列表相关推荐

  1. 如何在Dart中创建一个单例?

    Q: 单例模式确保一个类只有一个实例被创建.我如何在Dart中构建这个模式? A: 在Dart中构建一个单例很容易,以工厂构造方法为例: class Singleton {static final S ...

  2. IoC与DI工厂、单例、原型模式详解

    1.工厂模式 1.1 工厂模式的由来 在现实生活中我们都知道 原始社会自给自足(没有工厂) 农耕社会有了小作坊(简单工厂,如民间酒坊) 工业革命后有了流水线(工厂方法,自产自销) 现代产业链中有代工厂 ...

  3. 2021年大数据常用语言Scala(二十九):scala面向对象 单例对象

    目录 单例对象 定义object - 掌握 伴生对象 - 掌握 apply方法 - 掌握 main方法 单例对象 Scala中没有static关键字,但是它支持静态 如果要定义静态的东西,统统定义到o ...

  4. Scala单例对象(伴生对象)

    概念 Scala语言是完全面向对象的语言,所以并没有静态的操作(即在Scala中没有静态的概 念).但是为了能够和Java语言交互(因为Java中有静态概念),就产生了一种特殊的对象 来模拟类对象,该 ...

  5. android 克隆对象,克隆会破坏单例对象吗?

    假设有这样一个场景,如果复制的目标对象恰好是单例对象,那会不会破坏单例对象呢? 当然,我们在已知的情况下肯定不会这么干,但如果发生了意外怎么办?不防来修改一下代码. public class Conc ...

  6. Java 设计模式归纳(观察者、工厂、单例、策略、适配器、命令、装饰者、外观、模板方法、状态

    DesignPattern 项目地址:youlookwhat/DesignPattern  简介: Java 设计模式归纳 (观察者.工厂.单例.策略.适配器.命令.装饰者.外观.模板方法.状态). ...

  7. 【scala】类的定义和单例对象

    一.类的定义 Scala类的定义跟JAVA中类的定义基本是一样的. 示例 class ChecksumAccumulator{var sum = 0;//Scala默认关键字为publicprivat ...

  8. ThreadLocal和单例对象比较

    单例对象: 自始至终只有一个对象 当线程并发,每个线程需要自己独立的资源变量处理不同的业务时,单例对象远远不能满足需求 因此可以采用ThreadLocal模式 : 每个线程有自己独立的资源变量     ...

  9. 【Kotlin】Kotlin 单例 ( 懒汉式 与 恶汉式 | Java 单例 | Kotlin 单例 | 对象声明 | 伴生对象 | get 方法 | ? 与 !! 判空 )

    文章目录 I . 单例的懒汉式与恶汉式 II . Java 中的懒汉式与恶汉式 III . Kotlin 中对应 Java 的懒汉式与恶汉式 IV . Kotlin 对象 ( object ) 声明 ...

  10. Scala类的定义,主/辅构造器,以及方法中的变量定义,单例对象,伴生对象,Apply方法调用,应用程序对象

    1. 类 1.1. 类的定义 package cn.toto.scala.day2/*** 在Scala中,类并不用声明为public类型的.* Scala源文件中可以包含多个类,所有这些类都具有共有 ...

最新文章

  1. 宋仲基宋慧乔没能找到对的人,算法能帮我们找到么?
  2. linuxpip安装python包_Windows+Linux安装Python包管理工具pip
  3. bat截取字符串[转]
  4. linux 文件管理器_8个Linux文件管理器尝试
  5. java透明度_纯度与参考透明度
  6. Lua基础之coroutine(协程)
  7. 输入指定答案提示正确C语言,大学C语言课件及复习答案输入输出.ppt
  8. python怎么存为动图_Python将视频或者动态图gif逐帧保存为图片的方法
  9. DPDK性能优化技术汇总
  10. 通过文件名快速查找电脑中的文件
  11. LCM模组的简介与质量管理(连载四)
  12. CentOS 官网下载 iso 镜像
  13. 隐藏桌面上计算机图标不见了怎么办,电脑的快捷图标不见了怎么办
  14. 下拉刷新?我看好MaterialRefreshLayout!
  15. FANUC机器人有关动作速度倍率的相关系统变量-解释说明
  16. 中央财经大学C语言考研真题答案,2017年中央财经大学信息学院901C语言程序设计考研题库...
  17. Arduino ESP32将数据保存到NVS中
  18. 不要混淆事件的互不相容和互相独立
  19. C语言格式化输入和输出; Format格式化
  20. 【热血传奇】 认识客户端

热门文章

  1. 如何实现伸缩 (折叠) 报表?
  2. NetCore控制台实现自定义CommandLine功能
  3. Android 热修复的相关总结(主要是阿里百川的)
  4. [noi2005][treap]序列维护
  5. Android 黑色样式menu
  6. HDU 1102 Constructing Roads
  7. aspxgridview将所选项导出ASPxGridViewExporter1
  8. Retrofit的初次使用
  9. hihoCoder week10 后序遍历
  10. matplotlib实现数据的可视化