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); }
普通的构造函数: 会自动返回创建出来的对象, 不能手动的返回
工厂构造函数最大的特点: 可以手动的返回一个对象