Flutter 工厂模式 创建对象的手动档

16 min read
main(List<String> args) {
  final p1 = Person.withName("why");
  final p2 = Person.withName("why");
  print(identical(p1, p2));
}

// class Person {
//   final String name;
//   final String color = "red";

//   const Person(this.name);
//   const Person(this.color);
// }



class Person {
  String name;
  String color;

  static final Map<String, Person> _nameCache = {};
  static final Map<String, Person> _colorCache = {};

  factory Person.withName(String name) {
    if (_nameCache.containsKey(name)) {
      return _nameCache[name];
    } else {
      final p = Person(name, "default");
      _nameCache[name] = p;
      return p;
    }
  }

  factory Person.withColor(String color) {
    if (_colorCache.containsKey(color)) {
      return _colorCache[color];
    } else {
      final p = Person("default", color);
      _colorCache[color] = p;
      return p;
    }
  }

  Person(this.name, this.color);
}


普通的构造函数: 会自动返回创建出来的对象, 不能手动的返回
工厂构造函数最大的特点: 可以手动的返回一个对象