Flutter工厂构造函数如何使用

在Flutter中,工厂构造函数(factory constructor)的具体使用场景和普通构造函数有什么区别?能否结合代码示例说明如何正确实现一个工厂构造函数,特别是在需要缓存实例或返回已有对象时?另外,工厂构造函数是否支持异步操作,比如从网络或数据库加载数据后再创建对象?

2 回复

Flutter工厂构造函数用于返回类的实例,不一定是新对象。常用于单例模式或根据条件返回缓存实例。语法:factory 类名(参数) { 逻辑 }。例如实现单例时,检查实例是否存在,不存在则创建。

更多关于Flutter工厂构造函数如何使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,工厂构造函数(factory constructor)是一种特殊的构造函数,它不总是创建类的新实例,而是可以返回缓存实例、子类实例或执行其他逻辑。

基本语法

class MyClass {
  final String name;
  
  // 工厂构造函数
  factory MyClass(String name) {
    return MyClass._internal(name);
  }
  
  // 私有命名构造函数
  MyClass._internal(this.name);
}

主要使用场景

1. 单例模式

class Singleton {
  static Singleton? _instance;
  
  Singleton._internal();
  
  factory Singleton() {
    _instance ??= Singleton._internal();
    return _instance!;
  }
}

2. 返回缓存实例

class Logger {
  static final Map<String, Logger> _cache = {};
  final String name;
  
  factory Logger(String name) {
    return _cache.putIfAbsent(name, () => Logger._internal(name));
  }
  
  Logger._internal(this.name);
}

3. 根据条件返回不同子类

abstract class Animal {
  String makeSound();
  
  factory Animal(String type) {
    switch (type) {
      case 'dog':
        return Dog();
      case 'cat':
        return Cat();
      default:
        throw ArgumentError('Unknown animal type');
    }
  }
}

class Dog implements Animal {
  @override
  String makeSound() => 'Woof!';
}

class Cat implements Animal {
  @override
  String makeSound() => 'Meow!';
}

注意事项

  • 工厂构造函数使用 factory 关键字
  • 不能访问 this
  • 必须返回类的实例
  • 常用于实现设计模式或复杂对象创建逻辑

工厂构造函数让对象创建更加灵活,特别适合需要控制实例创建过程的场景。

回到顶部