Dart中的factory关键字用法

简介: Dart中的factory关键字用法

factory简介

在Dart中,factory关键字用于定义工厂构造函数。它与普通的构造函数有以下几个区别:


factory构造函数的调用可以返回子类型或其它类型的实例。普通构造函数总是返回其包含的类型的实例。

factory构造函数可以有返回值。普通构造函数的返回值永远是其包含的类型的实例。

factory构造函数不需要初始化包含类型的所有字段。普通构造函数需要确保所有非空的字段都有值。

使用factory的好处

1.可以根据传入的参数返回其它类型的实例,增加灵活性。

2.不需要全部初始化包含类型的字段,可以决定返回的实例属性,增加灵活性。

3.可以有返回值,不仅限于返回包含类型的实例,增加灵活性。

一般来说,当你的构造函数不完全按照包含类型的定义来初始化实例时,或者可能返回其它类型的实例,那么应该把它定义为factory构造函数。

实例

这里有一个示例可以说明factory构造函数的用法:


class Image {
  final String name;
  Image(this.name);
}
class ImageCache {
  static Map<String, Image> _cache = {};
  factory ImageCache.fromName(String name) {
    if (_cache.containsKey(name)) {
      return _cache[name];
    } else {
      final image = Image(name);
      _cache[name] = image;
      return image;
    }
  }
}

这里我们有:


Image 类表示一个图片,有name字段。

ImageCache 类表示图片缓存,有一个_cache字段存储所有的图片。

ImageCache有一个factory构造函数fromName,用来从图片name创建ImageCache。

那么这个构造函数的用法如下:

dart

var image1 = ImageCache.fromName(‘image1’);

var image2 = ImageCache.fromName(‘image2’);

var image3 = ImageCache.fromName(‘image1’);

第一次调用时,会创建一个Image(‘image1’)的实例,存入缓存,并返回。

第二次调用时,会再创建一个Image(‘image2’)的实例,存入缓存,并返回。

但是第三次调用时,会直接从缓存返回第一个Image(‘image1’)的实例。

所以这里使用factory构造函数有几个好处:

1.根据name的不同可以返回Image或ImageCache的实例,增加灵活性。

2.不必要每次调用都创建新的Image实例,可以重用缓存中的实例,优化性能。

3.有返回值Image或ImageCache的实例,而不仅限于ImageCache的实例。

这是一个典型的使用factory构造函数的例子,用来进行实例重用和灵活的返回值。

d38f41d7a3f10a1e242936dcf63a8067.png



相关文章
|
7月前
|
存储 Java
JavaSE——方法(2/2)-方法重载、return关键字在方法中单独使用
JavaSE——方法(2/2)-方法重载、return关键字在方法中单独使用
38 4
|
8月前
|
程序员 C++
为什么c++要引入class关键字
总之,C++引入 `class`关键字是为了支持面向对象编程,通过封装、继承、多态和抽象等特性,提供了更强大、灵活和可维护的编程工具,使得程序开发更加高效和可扩展。这使C++成为一种强大的编程语言,广泛用于各种应用领域。
73 1
|
8月前
|
Java
【Java入门】Java注释和关键字
【Java入门】Java注释和关键字
|
8月前
|
存储 Java
在Java中,定义一个类首先需要使用`class`关键字
【4月更文挑战第6天】在Java中,定义一个类首先需要使用`class`关键字
116 1
|
安全 Java 编译器
【Java用法】Java关键字 —— final的用法
【Java用法】Java关键字 —— final的用法
105 0
手写call-apply-bind以及了解柯里化
手写call-apply-bind以及了解柯里化
|
Java
Java中super函数的用法
Java中super函数的用法
137 0
|
Dart
Dart之 方法定义
Dart之 方法定义
121 0
Dart之 方法定义
|
Java
Java面向对象(7)--package和import关键字
Java面向对象(7)--package和import关键字
126 0
|
Java
Java 常用关键字的用法总结
在编写一个类时,其实就是在描述其对象的行为和属性,并没有产生实质上的对象,只有通过 new 关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。有时候希望无论是否产生了对象或无论产生了 多少对象的情况下,某些特定的数据在内存空间中只有一份 。
87 0